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

时间:2013-04-24 15:36:53

标签: haskell operators

使用度数角度时,我想定义要用作后缀运算符的度数符号(°)。目前,我使用这一行(在GHCi中):

let o = pi/180

并像这样使用它:

tan(11*o)

但我想去:

tan 11°

更清楚。度数运算符应优先于“tan”和其他函数。

我最接近的是:

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

像这样使用:

tan(11°0)

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

2 个答案:

答案 0 :(得分:16)

你不能,至少在报告定义的Haskell中。但是,有a GHC extension that allows postfix operators

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

答案 1 :(得分:4)

查看fixity declarations,它允许您更改中缀运算符的优先级。注意不要将优先级设置得太高,否则其他操作符将不会按预期运行。

例如:

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

编辑:啊,@丹尼尔费舍尔的权利 - 这不适用于您当前的需求,因为功能应用程序具有最高优先级