类型检查递归单参数和单输出函数[Ocaml]


let rec loop (x:?) : ? =
  loop loop

是否有任何类型替代?,允许此功能loop进行类型检查?

如果你向解释器提供-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),则该函数不能进行类型检查,因为它的类型是递归的。

最新更新