{- For this incorrectly typed program nhc gives a wrong and irritating error message: ==================================== Error after type deriving/checking: Derived type for Main.f at 4:1 does not match due to: different contexts Derived:(Prelude.Eq a) => (b -> (b -> Prelude.Bool)) Given :(a -> (a -> Prelude.Bool)) The type variables in the context of the derived type actually refer to the type variables in the given type. -} f :: a -> a -> Bool f = (==)