3
對於( - >),我們有:數據( - >)a b是什麼意思?
Prelude> :i (->)
data (->) t1 t2 -- Defined in ‘GHC.Prim’
是什麼語法是什麼意思?我認爲數據聲明關鍵字需要LHS上的類型構造函數和RHS上的一個或多個值構造函數?
(( - >)通常如何說出或發音?
對於( - >),我們有:數據( - >)a b是什麼意思?
Prelude> :i (->)
data (->) t1 t2 -- Defined in ‘GHC.Prim’
是什麼語法是什麼意思?我認爲數據聲明關鍵字需要LHS上的類型構造函數和RHS上的一個或多個值構造函數?
(( - >)通常如何說出或發音?
(->)
是函數類型,人們通常將其聲明爲「to」(即a -> b
將被讀作「a to b」)。
(->)
是構建在GHC中的一種基本構造:編譯器專門處理它。然而,有的像:i
工具,與正常的工作類型看(->)
假的定義,如果它是一個空的數據類型:
data (->) a b
這使得:i
來向您提供有關內置操作,如果它是一個正常的定義。
的(->) a b
語法是綴名的前綴版本,就像你可以在前綴的形式定義正常運營:
a ~+ b = a * b + b
相同
(~+) a b = a * b + b
如果你真的試圖定義(->)
這樣你自己,你會得到一個錯誤:
<interactive>:20:1-13: error:
Illegal binding of built-in syntax: (->)
但是,您可以定義空的數據類型,這樣的自己,如果你給他們一個有效的名稱:
data Foo a b
這使得Foo
有兩個(幻影)的論點有除⊥沒有價值,就像Void
類型從Data.Void
。
如果你要玩的綴語法,您可以定義一個類型的操作與TypeOperators
擴展啓用,具有相同的含義Foo
:
data a +~ b
或
data (+~) a b
這例如,如果我們想模擬OCaml並將其寫入a * b
而不是(a, b)
:
type a * b = (a, b)
'(+)a b'等價於表達式層面的'a + b'。 '( - >)a b'等同於類型級別的'a - > b''。用括號括起中綴表達式就是你如何在前綴中編寫它。 –