灵感来自this question:
在F#中是否可以使用显式类型递归?
type 'a Mu = In of 'a Mu 'a
let unIn (In x) = x
这段代码不幸地给出了“Type参数不能用作类型构造函数。
备注:例如,本文Functional Programming with Overloading and Higher-Order Polymorphism中使用了此构造。
使用示例(取自here):
type ('a, 'b) ListX =
| Nil
| Cons of 'a * 'b
type 'a List = ListX Mu
答案 0 :(得分:8)
不,这是不可能的。具体地,F#中的泛型具有与CLR相同的限制,即< T>。或者<'a>必须有点“*”。同样的限制意味着您不能直接在F#中创建“类型类”,因为例如“Monad m”将采用更高级别的参数'm'(例如“* - > *”,例如'list'和'option'可以是实例,每个都是泛型类型构造函数),但这不是允许的。