2014-09-21 64 views
-1

這是什麼意思?簡單變量'(用紅色問號標記)在Hudak的Haskell SOE書中第173頁?Hudak's Haskell學院表達中的術語

可能有人請解釋一下下面這句話是什麼意思?

...構造函數 - >的每個參數都必須是一個簡單的 變量。

->是一個類型構造函數嗎?不是數據構造函數。我糾正了嗎? 所以->的參數應該是類型。這是我的理解,但我沒有任何關於胡達克這句話意味着什麼的想法。

enter image description here enter image description here enter image description here

回答

5

在普通的Haskell的種,其可以給出的實例「模式」受到很大的侷限。特別是,它們應該是一個單一類型的構造函數,其中有一些類型變量,每個類型變量都可能有自己的約束。

而值得一述明自己的。就像表情,類型類型變量這可以被看作是沒有什麼比固定但未知的變量更多的「水平型」。

這些限制的目的最初是爲了確保結束該類型類分辨率。從那時起,更復雜的類型實例的價值已經通過用於解決類型類的更復雜的算法來實現,並且這些限制已經在許多方面取消。

但對於胡達克的信用,我相信他在寫之前多,工作的事。你可以看到(->)作爲前綴類型構造就像任何其他

type A a b = a -> b 

,然後解釋胡達克的聲明說這種類型的類的實例可以僅針對下列形式

instance Foo A  where 
instance Bar (A a) where 
instance Baz (A a b) where 

的事情,我們現在可以請參閱他的陳述的含義 - 適用於A的每種類型都是「簡單(類型)變量」。

+0

謝謝你的回答。簡單類型變量和非簡單類型變量之間有什麼區別?一個類型變量如何變得非簡單?你能舉一個非簡單類型變量的例子嗎? – jhegedus 2014-09-21 17:15:45

+0

我不熟悉那個術語。或許,Hudak意在暗示(根據框的上下文),「類型」別名不會被視爲變量(畢竟,他們是已知的),儘管他們可能會有這種感覺。 – 2014-09-21 17:59:56

+1

這些限制可能似乎艱鉅這些天,但說明(我認爲)按照他們,你基本上是語法上禁止所有需要擴展如'OverlappingInstances','UndecidableInstances'和(戰慄)'IncoherentInstances'複雜微妙之處。這可能是Haskell標準尚未正式解除它們的原因,即使「FlexibleInstances」本身被認爲是最無害的GHC擴展之一。 – 2014-09-22 00:01:26