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

Как дать неудобства операторам в лямбда?

Например, это не устанавливает проверку

\cons nil -> 5 `cons` 3 `cons` nil

и не делает этого

\(#) -> 5 # 3 # nil

Хотя оба они делают

\cons nil -> 5 `cons` nil
\(#) nil -> 5 # nil

Есть ли способ назначить infixites для операторов в lambdas. Я попробовал

infixr 5 #
foo = \(#) nil -> 5 # 3 # nil

который дает ошибку для определения # и

foo = \(infixr 5 #) nil -> 5 # 3 # nil

который является просто синтаксической ошибкой.

Что я могу сделать?

4b9b3361

Ответ 1

Объявления о фиксации могут быть локальными, но должны сопровождать определения, поэтому вам нужно написать что-то вроде

foo cons nil = 'a' # 'b' # nil
  where (#) = cons
        infixr 5 #

или

foo = \cons nil -> let (#) = cons; infixr 5 # in 'a' # 'b' # nil

и др.