ocaml 定义函数 'a -> 'b

ocaml define function 'a -> 'b

我的任务是定义两个函数,一个类型为:

 ('a-> 'b) -> ('c -> 'a) -> 'c -> 'b

第二个只有

'a -> 'b

虽然第一个功能是合成,但我是这样做的:

let compose f g arg = f(g(arg))

我卡在第二个了。谁能引导我找到正确答案?我做了这个:

let a x = List.hd []

但我很确定还有更简单的例子。

第一个函数不是柯里化,而是函数组合。柯里化的类型为 ('a * 'b -> 'c) -> 'a -> 'b -> 'c.

'a -> 'b 的解决方案非常好。请注意 List.hd [] 会引发异常。所以另一种实现是:

let f x = raise Not_found

需要注意的是 "nice" 函数不可能具有给定的类型。它从哪里获得类型 'b 到 return 的实际值?它必须是一个可以具有任何类型的值。