8
我已經與fix
功能瞎搞,我正好碰到這個:代字號在Haskell類型(類型相等)的含義
λ let fix f = let x = f x in x
λ fix (+)
<interactive>:15:5:
Occurs check: cannot construct the infinite type: t ~ t -> t
Expected type: t -> t
Actual type: t -> t -> t
Relevant bindings include it :: t (bound at <interactive>:15:1)
In the first argument of ‘fix’, namely ‘(+)’
In the expression: fix (+)
我清楚地知道,爲什麼這個錯誤發生,但我在那裏注意到一個有趣的類型簽名:t ~ t -> t
。這種類型是什麼意思? haskell中的類型簽名是什麼意思?他們在哪裏使用?
去哪裏使用它,不包括類型錯誤? – AJFarmar 2014-12-27 13:31:02
@AJFarmar'TypeFamilies'擴展允許您在自己的類型簽名中使用'〜'來表示類型相等,與在此錯誤消息中使用的方式相同。當你使用類型同義詞族時,你會發現它是你想要的東西,但是對於做各種類型級別的技巧(這是我頭頂的一個例子:你可以用' OverlappingInstances'與'實例Foo X'和'instance(y〜Y)=> Foo y') – jberryman 2014-12-27 21:44:37