Возможно, это может помочь вам.Вместо
let flip f x y = f y x ;;
напишите эквивалентное определение,
let flip f = fun x y -> f y x;;
, теперь посмотрите на тип,
val flip : ('a -> 'b -> 'c) -> 'b -> 'a -> 'c
это то же самое, что и в круглых скобках,
val flip : ('a -> 'b -> 'c) -> ('b -> 'a -> 'c)
функция flip
принимает функцию f
типа 'a -> 'b -> 'c
и возвращает функцию \fun x y -> f y x
типа 'b -> 'a -> 'c
.