Вопрос такой, как указано в заголовке. Как OCaml узнает, что = в apply_n fnx = ... это присваивание, тогда как = в n = 0 это сравнение?
Определения вводятся с ключевым словом let, которое указывает анализатору, что следующий = предназначен для определения, а не сравнения на равенство.
let
=
# let f x y = x + y;; val f : int -> int -> int = <fun> # f 1 2 = 1 * 2;; - : bool = false