灵感来自这个问题 https://stackoverflow.com/questions/1228644/are-infinite-types-aka-recursive-types-not-possible-in-f:
F# 中可以显式类型递归吗?
type 'a Mu = In of 'a Mu 'a
let unIn (In x) = x
不幸的是,这段代码给出了“类型参数不能用作类型构造函数。
备注:该结构在论文中使用具有重载和高阶多态性的函数式编程 http://web.cecs.pdx.edu/~mpj/pubs/springschool.html, 例如。
使用示例(取自here http://blog.plover.com/prog/springschool95-2.html):
type ('a, 'b) ListX =
| Nil
| Cons of 'a * 'b
type 'a List = ListX Mu
不,这是不可能的。具体来说,F# 中的泛型具有与 CLR 相同的限制,即 或 必须具有类型“ * ”。同样的限制意味着您无法直接在 F# 中编写“类型类”,因为例如“Monad m”将采用更高种类的参数“m”(例如“* -> *”,其中“list”和“option”可以是实例,它们本身都是泛型类型构造函数),但这是不允许的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)