[Haskell] compares :: Ord a => a -> a -> Ordering -> Ordering

Ross Paterson ross at soi.city.ac.uk
Wed Feb 15 03:52:12 EST 2006


On Wed, Feb 15, 2006 at 01:17:43AM +0000, Ben Rudiak-Gould wrote:
> I just realized that the class Ord should have an additional method:
> 
>   class Eq a => Ord a where
>     compares :: a -> a -> Ordering -> Ordering
>     compares x y d = case compare x y of { EQ -> d ; o -> o }
>     ...
> 
> This would make writing Ord instances much easier:
> 
>   instance (Ord a, Ord b, Ord c, Ord d) => Ord (a,b,c,d) where
>     compares (a1,b1,c1,d1) (a2,b2,c2,d2) =
>       compares a1 a2 . compares b1 b2 . compares c1 c2 . compares d1 d2

This does the same thing:

import Data.Monoid

instance (Ord a, Ord b, Ord c, Ord d) => Ord (a,b,c,d) where
	compare (a1,b1,c1,d1) (a2,b2,c2,d2) =
	compare a1 a2 `mappend` compare b1 b2 `mappend`
		compare c1 c2 `mappend` compare d1 d2



More information about the Haskell mailing list