[Haskell-beginners] Ord

Henry Lockyer henry.lockyer at ntlworld.com
Fri Dec 30 13:04:03 CET 2011


As you can probably see, there are circular definitions with compare and <= 

To make 'yourtype' an an instance of ord you must supply 

> -- Minimal complete definition: either 'compare' or '<='.


and then the circular definitions will be broken and your definition will provide the key missing part.

br
On 30 Dec 2011, at 11:51, Stanisław Findeisen wrote:

> Hi
> 
> Could anyone please explain to me what is going on here?
> 
> ------------------------------------------------------------------------
> -- | The 'Ord' class is used for totally ordered datatypes.
> --
> -- Instances of 'Ord' can be derived for any user-defined
> -- datatype whose constituent types are in 'Ord'.  The declared order
> -- of the constructors in the data declaration determines the ordering
> -- in derived 'Ord' instances.  The 'Ordering' datatype allows a single
> -- comparison to determine the precise ordering of two objects.
> --
> -- Minimal complete definition: either 'compare' or '<='.
> -- Using 'compare' can be more efficient for complex types.
> --
> class  (Eq a) => Ord a  where
>    compare              :: a -> a -> Ordering
>    (<), (<=), (>), (>=) :: a -> a -> Bool
>    max, min             :: a -> a -> a
> 
>    compare x y = if x == y then EQ
>                  -- NB: must be '<=' not '<' to validate the
>                  -- above claim about the minimal things that
>                  -- can be defined for an instance of Ord:
>                  else if x <= y then LT
>                  else GT
> 
>    x <  y = case compare x y of { LT -> True;  _ -> False }
>    x <= y = case compare x y of { GT -> False; _ -> True }
>    x >  y = case compare x y of { GT -> True;  _ -> False }
>    x >= y = case compare x y of { LT -> False; _ -> True }
> 
>        -- These two default methods use '<=' rather than 'compare'
>        -- because the latter is often more expensive
>    max x y = if x <= y then y else x
>    min x y = if x <= y then x else y
> 
> http://www.haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-Classes.html#Ord
> ------------------------------------------------------------------------
> 
> AFAIU this is the definition of the Ord type class in ghc. But what is
> this <= function that is used in the definition of compare? Here:
> 
>                  else if x <= y then LT
> 
> -- 
> This e-mail address is invalid, see:
> http://people.eisenbits.com/~stf/public-email-note.html .
> 
> OpenPGP: E3D9 C030 88F5 D254 434C  6683 17DD 22A0 8A3B 5CC0
> 
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners




More information about the Beginners mailing list