2
我正在學習Haskell,我很困惑this example。類型類中的類型值構造函數
考慮以下幾點:
class Tofu t where
tofu :: j a -> t a j
data Frank a b = Frank {frankField :: b a} deriving (Show)
instance Tofu Frank where
tofu x = Frank x
爲什麼是它使Frank
的Tofu
實例時,我們提供(據我所知),類型構造Frank x
,而不是一個值構造,即tofu x = Frank {frankField = x}
?
啊!我想我對這樣的事實感到困惑:類型和值構造函數都被命名爲「弗蘭克」......謝謝! – d125q
是的,起初可能有點混亂。只要記住,如果你在類型簽名/類聲明/ etc中看到一個CapitalizedIdentifier,它將是一個類型名稱,而在其他地方它將成爲一個構造函數。 – porges
@ d125q更具體地說,類型名稱與值構造函數名稱和函數/值名稱不共享相同的名稱空間。 – bheklilr