有没有办法用F#在类型约束中定义新类型参数?

时间:2016-01-14 16:02:04

标签: f# type-constraints

我似乎找不到办法做这样的事情:

"foo", "bar" |
% {$_}

请注意:

  • 首先在类型约束
  • 中定义类型参数
  • 定义类型
  • 时使用type参数

当然,这不会编译,因为type Instance<'Aggregate when 'Aggregate :> Aggregate.T<'State,'Event,'Failure>> = { ... Aggregate: 'Aggregate CurrentState: 'State ... } 未定义。还有其他方法可以保留实例的含义吗?

我想到了一些简单的方法,但它们都失去了意义。例如。 'StateInstance<'State,'Event,'Failure>不完全相同。

1 个答案:

答案 0 :(得分:5)

所有类型参数都必须明确,因此您需要包含'State'Event'Failure

type Instance<'Aggregate,'State,'Event,'Failure when 'Aggregate :> Aggregate.T<'State,'Event,'Failure>> = {
  ...
  Aggregate: 'Aggregate
  CurrentState: 'State
 ...
}

但是,使用此类型时,您很少需要明确指定这些额外参数。在创建实例时,编译器应该能够推断它们,并且即使您必须明确命名_类型,也可以使用匿名Instance<_,_,_,_>占位符来表示某些参数。