Ответ 1
Вам нужно добавить пробел между лямбдой и тильдой
\ ~(x,s) -> run (f x) s
Источником путаницы является то, что \
и ~
являются действительными символами для определяемых пользователем операторов, поэтому \~
анализируется как один, а не анализируется как начало выражения лямбда:
-- Defining a custom \~ operator is allowed:
let a \~ b = {- ... -}