键入检查递归单个参数和单个输出函数[Ocaml]

时间:2015-09-21 01:04:50

标签: recursion ocaml

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

是否有任何类型替换允许此功能?的{​​{1}}来键入check?

1 个答案:

答案 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),则无法将该函数设置为类型检查,因为它的类型是递归的。