AddBounds makes total orders from total orders. It just adds new least and greatest elements.
The problem with the derived instance is that it doesn't exploit the potential laziness of min on 'a'. Because of their types, min it can produce partial info from partial info and (<=) and compares cannot.
- Conal
Conal Elliott wrote:The class Ord is not suited for partial orders. If you write your own
> I have an algebraic data type (not newtype) that derives Ord:
>
> data AddBounds a = MinBound | NoBound a | MaxBound
> deriving (Eq, Ord, Read, Show)
Ord instances anyway, I'd suggest to introduce a proper new class (say
Lattice), too!
I hope that the computation of "uncomparable" does terminate in your
case. Maybe the lattice operation "join and "meet" are even more
appropriate than "min" and "max".
However, if your type parameter "a" has a total order, the above derived
instance looks correct.
HTH Christian