let rec loop (x:?) : ? =
loop loop
是否有任何类型替换允许此功能?
的{{1}}来键入check?
答案 0 :(得分:4)
如果您向口译员提供-rectypes
,它会告诉您功能的类型:
$ ocaml -rectypes
OCaml version 4.02.1
# let rec loop x = loop loop;;
val loop : 'a -> 'b as 'a = <fun>
您可以使用单独的类型变量为参数和返回类型声明此函数,但这似乎(对我而言)与不指定类型相同。
# let rec loop (x: 'a) : 'b = loop loop;;
val loop : 'a -> 'b as 'a = <fun>
如果不允许递归类型(使用-rectypes
),则无法将该函数设置为类型检查,因为它的类型是递归的。