如何推断出这个函数的类型?

tfb*_*boy 1 recursion ocaml functional-programming type-inference

我正在摸索着想出这个功能的签名

let make_rec f_norec =
  let rec f x = f_norec f x in
  f
Run Code Online (Sandbox Code Playgroud)

应该是

val make_rec : (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b = <fun>.

注意有一个奇怪的递归定义.当然,我在那里缺少一些知识.谁能告诉我如何计算函数的类型(如类型推理系统那样)?

十分感谢.

Ing*_*ngo 6

从内部开始,向外工作:

  1. 让我们称之为 x a
  2. 然后f有类型a -> b,其中b是结果类型f
  3. f_norec采取fx它必须返回相同的类型f,因此(a->b) -> a -> b
  4. make_rec采取f_norec,并返回f.因此((a->b)->a->b) -> (a->b).出于语法原因,可以省略最后一对括号.