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?
Tilde (
~
) in that error means type equality. It is telling you that it cannot deducet
to bet -> t
. The symbol is also used for irrefutable patterns, but that's a completely different context.