Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The meaning of tilde in Haskell types (Type equality)

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?

like image 696
AJF Avatar asked Dec 27 '14 13:12

AJF


1 Answers

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.

like image 132
Shoe Avatar answered Nov 18 '22 08:11

Shoe