Вы просто должны определить символ для таких приложений:
let (@@@) f x = f x ;;
А затем
let f x = x * 4;;
let g y = y + 2;;
let a = f @@@ g 3;;
print_int a;;
напечатает 20.
Обратите внимание, что следующая версияOCaml (3.13 или 4.00) предоставит встроенные примитивы для приложений, которые избегают создания промежуточных частично примененных функций:
external (@@@) : ('a -> 'b) -> 'a -> 'b = "%apply"
external (|>) : 'a -> ('a -> 'b) -> 'b = "%revapply"
Последняя противоположна %apply
:
print_int (3 |> g |> f);;
Примечаниечто вы не можете использовать ($), поскольку он является левоассоциативным в определении синтаксического анализатора OCaml:
let ($) f x = f x ;;
let a = f $ g 3;; (* ok ! ??? *)
let a = f $ g $ g 3;; (* ERROR -> g is not an integer,
because OCaml computes (f $ g) first *)