众所周知,OCaml拒绝定义像type t = t -> int这样的纯递归类型,Rosetta Code中的Y组合子示例也不起作用。然而,最近我发现像type t = A of (t -> int)这样的递归类型定义的小调整工作得很好。下面的代码是一些概念验证工作,用来检查哪个工作得好。(* OCaml version 4.08.0 *)
(* Precisely,
下面的OCaml代码创建了一个通用类型(不是我的): type t
val embed: unit -> ('a -> t) * (t -> 'a option在它中,对embed ()的调用创建了一个函数的二元组。元组中的第一个函数在封闭的ref单元格中存储任意值;第二个函数检索它。如果给第二个函数错误的t类型