2010/5/21 R J <rj248842@hotmail.com>:
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 <dave@zednenem.com> <http://www.eyrie.org/~zednenem/>