2016-01-10 83 views
1

就我所能收集的,Haskell中的單個結腸用於列表理解。爲什麼然後它顯示在:t命令中?還在:quit命令?沒有任何列表理解正在完成,是嗎?Haskell中單個結腸的含義:t

+13

前綴冒號用於GHCi命令。他們只能在交互式解釋器中工作,而不是Haskell語言的一部分。例如,您不能在.hs文件中使用它們。 –

+0

@SimonShine所以冒號只是按照慣例挑選的?函數/變量可以使用:在他們的名字? – Bob

+0

@Bob冒號字符必須從每個中綴構造函數開始。 IE:'數據Foo a = a:〜Bar'。中綴函數'(:)'是列表構造函數。 – AJFarmar

回答

3

:t(簡稱:type)語法是特別的GHCI,並且是Haskell語言的語法一部分。這與SQLite解釋器接受.tables作爲命令的方式類似,即使這不是一個有效的SQL語句。如果你輸入:?,你可以看到GHCi理解的所有命令的完整列表。

至於在實際Haskell代碼使用冒號:

  • 冒號本身是一個列表的構造方法。這是一個保留名稱,不能重新定義。
  • 您應該知道函數名稱始終以小寫字母開頭,而構造函數名稱始終以大寫字母開頭。那麼,以類似的方式,中綴構造函數必須以冒號開頭,而正常中綴運算符不得以開頭爲冒號(但可能在別處包含冒號)。

因此,例如,「?:?」是一個合法的運營商名稱,:??是一個合法的構造運營商的名稱。

x ?:? y = ...whatever... 

data Foobar = Int :?? Bool 
+0

我會在_type operators_中添加它,冒號可以像任何其他中綴符號一樣使用,例如,你可以定義'輸入a:&b = a'和'輸入a::b = b'。 – leftaroundabout

+0

在GHC中,我認爲中綴*類型*構造函數不需要以冒號開頭。 – dfeuer