如何在Haskell中定义后缀操作符



当使用角度时,我想定义度符号(°)作为后缀操作符。目前,我使用这一行(在GHCi中):

let o = pi/180

,并像这样使用:

tan(11*o)

但是我想直接写

tan 11°

更清晰。度运算符的优先级应该高于' tan '和其他函数。

我得到的最接近的是:

let (°) x _ = x*pi/180

的用法如下:

tan(11°0)

,但是默认优先级意味着仍然需要父级,并且使用虚拟数字,这种替代方法比我目前使用的更糟糕。

不可以,至少在报告中定义的Haskell中是这样。但是,有一个GHC扩展允许后缀操作符。

不幸的是,这并没有给你想要的一切;特别是,它仍然需要括号,就像一元反运算符经常做的那样。

查看修复声明,它允许您更改中缀操作符的优先级。注意不要将优先级设置得太高,否则其他操作符的行为将不符合预期。

例如:

infixl 7 °
(°) x _ = x*pi/180

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

最新更新