在 Ocaml 中给出类型为 ('a -> 'a -> 'a) -> ('a * 'a -> 'a) 的表达式

Give an expression of type ('a -> 'a -> 'a) -> ('a * 'a -> 'a) in Ocaml

我正在学习 Ocaml,我在测试中解决了这个问题:

给出('a -> 'a -> 'a) -> ('a * 'a -> 'a)

类型的表达式

我无法得到解决方案,我能得到的最接近的是:

let expr f (x, y) = if f x y = x then x else y
val expr : ('a -> 'a -> 'a) -> 'a * 'a -> 'a = <fun>

如果你有想法...

在我看来,唯一缺少的部分是认识到这些类型是相同的:

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

在类型表达式中,-> 运算符是右结合的。

换句话说,在我看来你的回答已经正确了。