15

我一直在搞乱这个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中的类型签名中是什么意思?它们在哪里使用?

4

1 回答 1

20

该错误中的波浪号 ( ~) 表示类型相等。它告诉你它不能推断t为是t -> t。该符号也用于无可辩驳的模式,但这是一个完全不同的上下文。

于 2014-12-27T13:27:42.417 回答