2010/5/21 R J <[email protected]>:
> Why does the following, trivial  code snippet below hang GHCi when I type
> "Scalene > Failure", and what's the fix?

An instance of Ord must declare compare or (<=). You only defined (<),
so (>) is using the default definition. Here are the defaults:

    compare x y = if x == y then EQ
                  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 }
    max x y = if x <= y then y else x
    min x y = if x <= y then x else y

Note that the default definitions of (<=) and compare call each other,
leading to an infinite loop when both are used.

Simple fix: define (<=) instead of (<).
-- 
Dave Menendez <[email protected]>
<http://www.eyrie.org/~zednenem/>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to