id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,difficulty,testcase,blockedby,blocking,related
2496,Invalid Eq/Ord instances in Data.Version,guest,duncan,"(From Adrian Hey)

In Data.Version we have:

{{{
data Version = 
  Version {versionBranch :: [Int]
          ,versionTags :: [String]
          }

instance Eq Version where
  v1 == v2  =  versionBranch v1 == versionBranch v2 
                && sort (versionTags v1) == sort (versionTags v2)
                -- tags may be in any order

instance Ord Version where
  v1 `compare` v2 = versionBranch v1 `compare` versionBranch v2
}}}

The ""laws"" for valid Eq/Ord instances were argued about recently but the H98 report seems reasonably clear that (==) is supposed to test for equality and the compare method is supposed to define a total ordering. There is also an implied but not explicitly stated law that:

{{{
 (x == y = True)  <-> (x `compare` y = EQ)
}}}
and also this I guess..
{{{
 (x == y = False)  <-> ~(x `compare` y = EQ)
}}}

This law is implied by the Eq constraint on the Ord class (which seems to serve no purpose otherwise).

See also:
[http://www.haskell.org/pipermail/haskell-prime/2008-March/002330.html]



 
",bug,new,normal,_|_,libraries/base,6.8.3,,,,Unknown/Multiple,Unknown/Multiple,None/Unknown,Unknown,,,,
