
From Prelude.hs: 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 So, in your case: Scalene > Failure -> {Gee, there's no definition of ">" in this "Ord" instance; I'll have to take the default one} compare Scalene Failure -> {There's no definition of "compare" either; again, the default one} Scalene <= Failure -> {Again, there is no definition of "<="} compare Scalene Failure -> loop On 21 May 2010, at 21:06, R J wrote:
Why does the following, trivial code snippet below hang GHCi when I type "Scalene > Failure", and what's the fix?
data Triangle = Failure | Equilateral | Isosceles | Scalene deriving (Eq, Show)
instance Ord Triangle where Failure < Failure = False Failure < _ = True
Equilateral < Failure = False Equilateral < Equilateral = False Equilateral < _ = True
Isosceles < Scalene = True Isosceles < _ = False
Scalene < _ = False
(I tried submitting this to beginners@haskell.org, but even though I've signed up for that mailing list, I got a bounce-back saying that I needed admin approval to submit anything to that list, and I haven't heard from an admin, so I'm posting it here.)
The New Busy is not the too busy. Combine all your e-mail accounts with Hotmail. Get busy._______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe