The problem probably is that your Ord instance does not
define a total order. Below a small example exhibiting the
same problem.

This shows the usefulness of specification of Haskell programs
(e.g. with Programatica or HasCASL) - verification could be used to
detect such problems.

Till


module SetExample where

import Data.Set

data D = A | B | C deriving (Eq, Show)
instance Ord D where
  compare A B = LT
  compare _ _ = GT

l = fromList [A,B,C,A,B,C]

main = putStrLn (show (valid l))

Walter Moreira wrote:
Hello list. Are there situations where a set can contain duplicate
elements?

I have a newtype and it is an instance of 'Eq' via the 'compare' method,
and it is also an instance of 'Ord'. After some Data.Set operations
with sets of that type I get a set which contains two elements which
compare equal. What am I doing wrong?

The function 'Set.valid' returns 'False' when applied to the set. I
use the function 'Set.fromList' sometimes. Is it supposed to always
yield a valid set? or it may depend on the order or equality?

Sorry the question is a little vague. When I try to construct small
examples the problem disappear.

Thanks,
Walter
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell


--
Till Mossakowski               Phone +49-421-218-4683
Dept. of Computer Science      Fax +49-421-218-3054
University of Bremen           [EMAIL PROTECTED]
P.O.Box 330440, D-28334 Bremen http://www.tzi.de/~till
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to