我似乎无法找到一种方法来做这样的事情:
type Instance<'Aggregate when 'Aggregate :> Aggregate.T<'State,'Event,'Failure>> = {
...
Aggregate: 'Aggregate
CurrentState: 'State
...
}
注意我想:
- 首先在类型约束内定义类型参数
- 定义类型时使用类型参数
这当然不会编译,因为'State
没有定义。是否有其他方法可以在保留实例含义的同时做到这一点?
我想到了几个简单的方法来做这件事,但都失去了意义。例如。 Instance<'State,'Event,'Failure>
与 Instance<'Aggregate>
不完全相同.
最佳答案
所有类型参数必须是显式的,所以你需要包括'State
, 'Event
, 和 'Failure
:
type Instance<'Aggregate,'State,'Event,'Failure when 'Aggregate :> Aggregate.T<'State,'Event,'Failure>> = {
...
Aggregate: 'Aggregate
CurrentState: 'State
...
}
但是,在使用这种类型时,您应该很少需要明确指定那些额外的参数。创建实例时,编译器应该能够推断它们,您可以使用匿名 _
某些参数的占位符,即使您必须命名 Instance<_,_,_,_>
明确输入。
关于f# - 有没有办法在 F# 的类型约束中定义新的类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34794103/