我一直在搞乱fix
功能,我碰巧遇到了这个问题:
λ 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中的类型签名中意味着什么?他们在哪里使用?
答案 0 :(得分:13)
该错误中的Tilde(~
)表示类型相等。它告诉您,它无法推断t
为t -> t
。该符号也用于irrefutable patterns,但这是一个完全不同的背景。