В OCaml, является ли оператор инфиксным или префиксным, определяется его первым символом.
В вашем случае символ '~' предназначен для префикса: с помощью let (~ = ~) a b = ... вы определяете префиксный оператор. ~ = ~ a является допустимым выражением и возвращает функцию.
Помимо инфикса или префикса, ассоциативность инфиксного оператора (левый или правый) и приоритет оператора (какой из + и * имеет больший?) Синтаксически определяются первым символом оператора.
Это звучит некрасиво, поскольку вы не можете контролировать характеристики ваших причудливых операторов, но это облегчает чтение исходного кода OCaml кем-то другим со множеством странных пользовательских операторов.
Вот таблица символов для операторов:
The first char : prefix/infix/connectivity power/left-or-right
! ~ ? : prefix
= < > | & $ : infix0, left
@ ^ : infix1, right
+ - : infix2, left
* / : infix3, left ( ** is exceptional. It is right assoc and have power 4)