2013-04-24 67 views
6

使用角度度數時,我想定義度量符號(°)作爲後綴運算符。目前,我用這條線(在GHCI):如何在Haskell中定義一個後綴運算符?

let o = pi/180 

,並使用它像這樣:

tan(11*o) 

但我想只是去:

tan 11° 

這是更清晰。學位經營者的優先級應高於'tan'等職能。

我得到的最接近是:

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

像這樣使用:

tan(11°0) 

但是默認的優先級是指括號仍然需要,並與虛擬號碼,這種替代是比我目前使用的還差。

+8

「程度運算符應該比'tan'和其他函數具有更高的優先級。」 < - 這不起作用,函數應用程序具有語言規範的最高優先級。 – 2013-04-24 15:42:27

+0

爲什麼不簡單定義一個新的數字類型(包裝Double或其他)與代表度數的新類型?當然,如果你想定義平等等,你必須注意程度的「模塊化」性質。 – 2013-04-24 16:50:57

+0

Haskell不是那種能夠編寫你習慣寫作的方式的任何語言的語言它。與Perl甚至Python不同的是,Haskell的中綴語法實際上非常簡潔,它恰好設計得非常好,即使這個簡單的基礎也允許使用很多非常有效的shorthands,忽略很多parens,並且通常使事情變得可讀。但後一點是部分原因在於存在這些嚴格的解析規則。 – leftaroundabout 2013-04-24 18:54:14

回答

3

檢出fixity declarations,它允許您更改中綴操作符的優先級。小心不要將優先級設置得太高,否則其他運算符將無法按預期運行。

例如:

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

編輯:啊,@Daniel費的權利 - 這不會對您目前的工作需要,因爲功能的應用程序具有最高的優先級

11

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

不幸的是,這並不能給你你想要的一切;特別是它仍然需要括號,因爲一元否定算子經常這樣做。