[Haskell-cafe] Derivation of Eq given Ord

Dougal Stanton ithika at gmail.com
Thu Aug 9 11:57:26 EDT 2007

Is there a reason why automatic derivation of Ord without Eq doesn't
do "the sensible thing" and just derive Eq anyway?

> newtype Id a = Id { a :: String }
>                    deriving (Read, Show, Eq, Ord)
> newtype Ego a = Ego { b :: String }
>                    deriving (Read, Show, Ord)

Both will type check, but if you try any (in)equality operators on the
second they'll be spat back at you.

> *Main> let e1 = Ego ""
> *Main> let e2 = Ego ""
> *Main> e1 < e2
> <interactive>:1:0:
>     No instance for (Eq (Ego a))
>       arising from use of `<' at <interactive>:1:0-6
>     Possible fix: add an instance declaration for (Eq (Ego a))
>     In the expression: e1 < e2
>     In the definition of `it': it = e1 < e2

It doesn't seem *much* of a hardship, but it wasn't what I expected.
I'm not used to GHC accepting input and silently dropping stuff it
doesn't like...



More information about the Haskell-Cafe mailing list