infixr 5 :-:
data List a = Empty | a :-: (List a) deriving (Show, Read, Eq, Ord)
我們只是寫了一個 :-: (List a) 而不是 Cons a (List a)。現在,我們可以像這樣在我們的串列型別中寫出串列:
ghci> 3 :-: 4 :-: 5 :-: Empty
(:-:) 3 ((:-:) 4 ((:-:) 5 Empty))
ghci> let a = 3 :-: 4 :-: 5 :-: Empty
ghci> 100 :-: a
(:-:) 100 ((:-:) 3 ((:-:) 4 ((:-:) 5 Empty)))
我明白 :-: 應該像 Cons 一樣作業,但我真的不明白為什么我們被允許這樣做以及如何實際輸入 infixr 5 :-: 。
uj5u.com熱心網友回復:
我知道這
:-:應該像這樣作業,Cons但我真的不明白為什么我們被允許這樣做......
因為Haskell 報告是這樣說的。在語法中,constr是一個資料建構式。該構造可以是CON隨后零個,一個或多個型別,一個CON隨后記錄語法,或型別,操作者conop接著另一種型別。這被定義為:
constr → con [!] atype 1 … [!] atype k
| (btype | !atype) conop (btype | !atype)
| con { fielddecl 1 , ... , fielddecl n }
所述conop可以是運營商consym,或反引號之間的識別符,等的中綴的變體`foo`,其被寫入到語法部分為:
conop → consym | `conid`
的語法,一個指定consym定義為:
consym → ( : {symbol })〈reservedop〉
所以冒號后面的符號和符號這樣的序列不應該是一個保留的操作員等:,::等。
這意味著除了保留的運算子之外,您可以使用以冒號 ( :)開頭的運算子作為資料建構式。
...以及如何實際鍵入
infixr 5 :-:.
您可以通過用:{和包圍這些來撰寫多行陳述句:}:
ghci> :{
| infixr 5 :-:
| data List a = Empty | a :-: (List a) deriving (Show, Read, Eq, Ord)
| :}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387006.html
上一篇:如何使用IndependentScreens獲取監視器x上的作業區串列
下一篇:IO()遞回型別匹配問題
