The meaning of tilde in Haskell types (Type equali

2019-01-27 17:07发布

问题:

I've been messing around with the fix function, and I happened across this:

λ 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 (+)

I know full well why this error is occurring, but I noticed a funny type signature up there: t ~ t -> t. What does this type mean? What do tilde mean in type signatures within haskell? Where are they used?

回答1:

Tilde (~) in that error means type equality. It is telling you that it cannot deduce t to be t -> t. The symbol is also used for irrefutable patterns, but that's a completely different context.