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 [email protected], 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
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe