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

标签 f# type-constraints

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

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/

相关文章:

C# 是否可以创建可选的泛型类型约束

f# - F# 函数名称和指向该名称的函数值之间的区别

compiler-errors - 奇怪地重复出现的通用特征模式 : overflow evaluating the requirement

performance - 调试 GHC 的约束求解器导致的编译时性能问题

C# 泛型方法,new() 构造函数约束中的类型参数

F# noob - 映射和减少单词

f# - 如何在 F# 中从 Excel 获取单元格数据(使用适当的输入)

f# - 我应该为 Mac OS X 中的 F# 脚本使用哪个 shebang?

wpf - F# WPF MouseMove 参数