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

Gie*_* B. 3 f# type-constraints

我似乎无法找到一种方法来做这样的事情:

type Instance<'Aggregate when 'Aggregate :> Aggregate.T<'State,'Event,'Failure>> = {
  ...
  Aggregate: 'Aggregate
  CurrentState: 'State
  ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,我想:

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

当然,这不会编译,因为'State没有定义.还有其他方法可以在保留实例含义的同时执行此操作吗?

我想到了一些简单的方法来做到这一点,但它们都失去了意义.例如Instance<'State,'Event,'Failure>并不完全相同Instance<'Aggregate>.

kvb*_*kvb 5

所有类型参数必须是明确的,所以你需要包括'State,'Event'Failure:

type Instance<'Aggregate,'State,'Event,'Failure when 'Aggregate :> Aggregate.T<'State,'Event,'Failure>> = {
  ...
  Aggregate: 'Aggregate
  CurrentState: 'State
 ...
}
Run Code Online (Sandbox Code Playgroud)

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