Tho*_*ker 7 recursion f# type-systems
灵感来自这个问题:
F#中是否可以显式类型递归?
type 'a Mu = In of 'a Mu 'a
let unIn (In x) = x
Run Code Online (Sandbox Code Playgroud)
这段代码不幸地给出了"Type参数不能用作类型构造函数.
备注:例如,该构造用于具有重载和高阶多态的函数式编程.
用法示例(取自此处):
type ('a, 'b) ListX =
| Nil
| Cons of 'a * 'b
type 'a List = ListX Mu
Run Code Online (Sandbox Code Playgroud)
不,这是不可能的.具体而言,F#中的泛型具有与CLR相同的限制,即<T>或<a>必须具有种类"*".同样的限制意味着你不能直接在F#中创建"类型类",因为例如"Monad m"会采用更高级的参数'm'(例如"* - >*",例如'list'和'option '可能是实例,每个实例都是泛型类型构造函数),但这是不允许的.