#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)
В выражении типа ->
оператор является ассоциативным справа.
Другими словами, мне кажется, что ваш ответ уже верен.