The point here is that these strings are neither equal nor identical.
(This is not strictly required, of course; you can write a typeclass that defines a two-paramater ==, instead of a -> a -> Bool, it could be a -> b -> Bool. But that's dumb, so nobody does.)
Prelude> 2 == 2.0 True