Подтвердить что ты не робот

Можно ли использовать неопровержимые шаблоны тильды (`~`) в лямбда-выражениях?

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
4b9b3361

Ответ 1

Вам нужно добавить пробел между лямбдой и тильдой

\ ~(x,s) -> run (f x) s

Источником путаницы является то, что \ и ~ являются действительными символами для определяемых пользователем операторов, поэтому \~ анализируется как один, а не анализируется как начало выражения лямбда:

-- Defining a custom \~ operator is allowed:
let a \~ b = {- ... -}