[Haskell-cafe] A bug of groupBy implement
Brent Yorgey
byorgey at seas.upenn.edu
Mon Dec 7 12:20:40 EST 2009
On Mon, Dec 07, 2009 at 12:15:45PM -0500, Brent Yorgey wrote:
> On Tue, Dec 08, 2009 at 12:45:59AM +0800, L.Guo wrote:
> > Hi there:
> >
> > My friend asked me a question, and i suppose he has found a bug of `groupBy'.
> >
> > Here is the code piece:
> >
> > > List.groupBy (\a b -> Foreign.unsafePerformIO (Text.Printf.printf "\t%d <= %d ?: %s\n" a b (show (a<=b)) >> return (a<=b))) [7,3,5,9,6,8,3,5,4]
> >
> > I have tested it in GHC 6.10.4 (Win XP) and GHC 6.8.3 (Linux), both give the wrong result (categaried):
> >
> > 7 <= 3 ?: False
> > 3 <= 5 ?: True
> > 3 <= 9 ?: True
> > 3 <= 6 ?: True
> > 3 <= 8 ?: True
> > 3 <= 3 ?: True
> > 3 <= 5 ?: True
> > 3 <= 4 ?: True
> > [[7],[3,5,9,6,8,3,5,4]]
>
> This looks like the right result to me. What makes you think it is
> wrong? What result do you expect?
I just realized I think I understand what the confusion is. You think it should return
[[7],[3,5,9],[6,8],[3,5],[4]]?
But in fact, groupBy only works that way for equivalence relations,
where it makes perfect sense to just compare the first thing in each
sublist against all the rest, instead of comparing each pair of
adjacent elements. The behavior you want is something I have been
planning to add to the Data.List.Split module for a while.
-Brent
More information about the Haskell-Cafe
mailing list