Можно ли использовать неопровержимые шаблоны тильды (`~`) в лямбда-выражениях?
GHC дает мне parse error on input \~, если я попытаюсь поместить тильду в шаблон лямбда-выражения, как я могу сделать с именованными функциями
let step = \~(x,s) -> run (f x) s -- Parse Error
let step ~(x, s) = run (f x) s -- Works fine
Ответ 1
Вам нужно добавить пробел между лямбдой и тильдой
\ ~(x,s) -> run (f x) s
Источником путаницы является то, что \ и ~ являются действительными символами для определяемых пользователем операторов, поэтому \~ анализируется как один, а не анализируется как начало выражения лямбда:
-- Defining a custom \~ operator is allowed:
let a \~ b = {- ... -}