Ticket #2496 (new bug)
Invalid Eq/Ord instances in Data.Version
| Reported by: | guest | Owned by: | duncan |
|---|---|---|---|
| Priority: | normal | Milestone: | _|_ |
| Component: | libraries/base | Version: | 6.8.3 |
| Keywords: | Cc: | ||
| Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
| Type of failure: | None/Unknown | Difficulty: | Unknown |
| Test Case: | Blocked By: | ||
| Blocking: | Related Tickets: |
Description
(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
Change History
Note: See
TracTickets for help on using
tickets.
