如何给lambda中的运算符添加空间?

PyR*_*lez 11 syntax lambda haskell infix-notation infix-operator

例如,这不是类型检查

\cons nil -> 5 `cons` 3 `cons` nil
Run Code Online (Sandbox Code Playgroud)

这也不是

\(#) -> 5 # 3 # nil
Run Code Online (Sandbox Code Playgroud)

虽然这两者都有

\cons nil -> 5 `cons` nil
\(#) nil -> 5 # nil
Run Code Online (Sandbox Code Playgroud)

有没有办法在lambdas中为运算符分配infixites.我试过了

infixr 5 #
foo = \(#) nil -> 5 # 3 # nil
Run Code Online (Sandbox Code Playgroud)

这给出了没有定义#和的错误

foo = \(infixr 5 #) nil -> 5 # 3 # nil
Run Code Online (Sandbox Code Playgroud)

这只是一个语法错误.

我能做什么?

Rei*_*ton 16

固定声明可以是本地的,但必须伴随定义,所以你必须写一些类似的东西

foo cons nil = 'a' # 'b' # nil
  where (#) = cons
        infixr 5 #
Run Code Online (Sandbox Code Playgroud)

要么

foo = \cons nil -> let (#) = cons; infixr 5 # in 'a' # 'b' # nil
Run Code Online (Sandbox Code Playgroud)

等等

  • 确实很好!这是Haskell98,Haskell2010或GHC的一部分吗? (4认同)