Приведите выражение типа (‘a -> ‘a ->> ‘a) ->>> (‘a * ‘a ->>>> ‘a) в Ocaml

#types #expression #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>
 

Если у вас есть идея…

Ответ №1:

Мне кажется, что единственное, чего не хватает, — это признать, что эти типы одинаковы:

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

В выражении типа -> оператор является ассоциативным справа.

Другими словами, мне кажется, что ваш ответ уже верен.