В Haskell вы можете делать то, что вы хотите, с операторскими секциями, что намного чище, чем flip
imo:
Prelude> :t (2 -)
(2 -) :: Num a => a -> a
Prelude> :t ((-) 2)
((-) 2) :: Num a => a -> a
OCaml не поддерживает эту хитрость (afaik).Однако, если вам нравится flip
, определить ваше собственное просто:
let flip f x y = f y x;;
Или вы можете использовать стандартную библиотеку, которая уже определила ее, например Core
и Batteries
.Например,
# open Core
utop # Fn.flip;;
- : ('a -> 'b -> 'c) -> 'b -> 'a -> 'c = <fun>
Между прочим, в отсутствие операторных секций я нахожу fun x -> x-2
намного более ясным, чем любая из двух предложенных вами альтернатив.Может показаться, что это не очень хорошо, но сразу понятно, что это значит.
Любить ясные и очень явные выражения над умными и краткими выражениями - очень идиоматичный OCaml.