Ответ 1
В OCaml ли оператор infix или префикс определяется его первым символом. В вашем случае символ "~" предназначен для префикса: 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)