Haskell类型中波形符的含义(类型相等)

时间:2014-12-27 13:19:28

标签: haskell types tilde

我一直在搞乱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中的类型签名中意味着什么?他们在哪里使用?

1 个答案:

答案 0 :(得分:13)

该错误中的Tilde(~)表示类型相等。它告诉您,它无法推断tt -> t。该符号也用于irrefutable patterns,但这是一个完全不同的背景。