我有一个任务来定义两个函数,一个是type:
('a-> 'b) -> ('c -> 'a) -> 'c -> 'b
和第二个只有
'a -> 'b
虽然第一个功能是组合,但我已经这样做了:
let compose f g arg = f(g(arg))
我被困在第二个。有人能引导我正确回答吗?我做了这个:
let a x = List.hd []
但我非常确定有更简单的例子。
答案 0 :(得分:4)
第一个功能不是currying,它的功能构成。 Currying的类型为('a * 'b -> 'c) -> 'a -> 'b -> 'c
。
您对'a -> 'b
的解决方案非常好。请注意List.hd []
引发异常。所以另一个实现是:
let f x = raise Not_found
要意识到的是,没有"很好"函数可能具有给定的类型。它会在哪里获得返回类型'b
的实际值?它必须是一个可以有任何类型的值。