On 3/3/11 7:18 PM, Jacek Generowicz wrote:
Hi Cafe,

It seems that I don't understand what groupBy does.

I expect it to group together elements as long as adjacent ones satisfy
the predicate, so I would expect ALL four of the following to give one
group of 3 and a group of 1.

Prelude> :m + Data.List
Prelude Data.List> groupBy (<) "abcb"
["abcb"]
Prelude Data.List> groupBy (<) "abca"
["abc","a"]
Prelude Data.List> groupBy (<) [1,2,3,2]
[[1,2,3,2]]
Prelude Data.List> groupBy (<) [1,2,3,1]
[[1,2,3],[1]]

What am I missing?

The behavior is that it's comparing subsequent elements to the first element of the current chunk. I'm not sure how often that'd be a desirable behavior compared to the one you and I would expect. Of course, the API only specifies the behavior of groupBy on equality-like predicates IIRC. So technically either behavior is permissible...

This should be FAQed on the documentation a bit better.

--
Live well,
~wren

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to