#3280: The order of arguments to the function passed to nubBy got swapped
somehow
-----------------------------+----------------------------------------------
Reporter: guest | Owner:
Type: bug | Status: new
Priority: normal | Component: libraries/base
Version: 6.10.3 | Severity: normal
Keywords: | Testcase:
Os: Unknown/Multiple | Architecture: Unknown/Multiple
-----------------------------+----------------------------------------------
According to the Report:
{{{
nubBy :: (a -> a -> Bool) -> [a] -> [a]
nubBy eq [] = []
nubBy eq (x:xs) = x : nubBy eq (filter (\y -> not (eq x y)) xs)
}}}
Hence, we should have that
{{{
nubBy (<) (1:2:[])
= 1 : nubBy (<) (filter (\y -> not (1 < y)) (2:[]))
= 1 : nubBy (<) []
= 1 : []
}}}
However in ghc-6.10.3:
{{{
Prelude Data.List> nubBy (<) [1,2]
[1,2]
}}}
The order of the parameters to the function which is passed to nubBy is
*important* since the function might not be an equivalence relation. nubBy
is more generally useful for sieving even when the relation is not
symmetric. groupBy, for a similar reason, has applications for grouping
beyond those provided by equivalence relations, and I think we should be
able to rely on its behaviour.
Moreover, I contend that the Report's order is more sensible, since the
parameters to the relation stay in the left-to-right order in which they
occurred in the list.
- Cale
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/3280>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs