如何在Haskell中定义后缀运算符?

Jam*_*igh 9 haskell operators

使用度数角度时,我想定义度数符号(°)作为后缀运算符.目前,我使用此行(在GHCi中):

let o = pi/180
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

tan(11*o)
Run Code Online (Sandbox Code Playgroud)

但我想去:

tan 11°
Run Code Online (Sandbox Code Playgroud)

这更清楚.学位操作员应该具有比' tan'和其他功能更高的优先级.

我最接近的是:

let (°) x _ = x*pi/180
Run Code Online (Sandbox Code Playgroud)

像这样使用:

tan(11°0)
Run Code Online (Sandbox Code Playgroud)

但是默认优先级意味着仍然需要parens,并且使用虚拟数字,这个替代方案比我目前使用的更差.

C. *_*ann 15

你不能,至少在报告定义的Haskell中.但是,GHC扩展允许后缀运算符.

不幸的是,这并没有给你想要的一切; 特别是,它仍然需要括号,因为一元否定算子经常这样做.


ami*_*dfv 3

查看固定性声明,它允许您更改中缀运算符的优先级。请注意不要将优先级设置得太高,否则其他运算符将不会按预期运行。

\n\n

例如:

\n\n
infixl 7 \xc2\xb0\n(\xc2\xb0) x _ = x*pi/180\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:啊,@Daniel Fischer 是对的 - 这不能满足您当前的需求,因为函数应用程序具有最高优先级

\n