On Apr 3, 2005 12:41 AM, Lloyd Smith <[EMAIL PROTECTED]> wrote: > Hi everyone, I defined my own list datatype and then tried to declare > it as an instance of type class Ord. However when I test it with > > Nil > Cons 1(Nil) > I get an "ERROR - Control stack overflow" > > I am under the impression that the ord class defines default > implementations of (<=), (>),(>=) so that I only have to supply the > implementation of (<) shown below. Can some one tell me why this does > not work the way I expect it to? > > My very own list data type > > > data List a = Nil > > | Cons a (List a) > > deriving (Show) > > Derive the equality type for list. > > > instance (Eq a) => Eq (List a) where > > Nil == Nil = True > > Nil == Cons y ys = False > > Cons x xs == Nil = False > > Cons x xs == Cons y ys = (x == y) && (xs == ys) > > Derive the ordered type for list > > > instance (Ord a) => Ord (List a) where > > Nil < Nil = False > > Nil < Cons y ys = True > > Cons x xs < Nil = False > > Cons x xs < Cons y ys = (x < y) && (xs < ys)
(<=), (>) and (>=) are defined using 'compare', not (<). Write 'compare' yourself and everything will be good. But why don't you just derive Eq and Ord for List? -- Friendly, Lemmih _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
