Generalize groupBy in a useful way?

Aaron Denney wnoise at ofb.net
Fri Sep 5 21:43:01 EDT 2008


On 2008-09-05, Bart Massey <bart at cs.pdx.edu> wrote:
> I experienced some interesting behavior with groupBy
> tonight, and thought I'd run it by folks as a proposal for
> the Haskell libraries.
>
>
> Consider the predicate
>
>     incp e1 e2 = e1 + 1 == e2
>
> Naively, one might expect
>
>     groupBy incp [2,3,4,5,6] == [[2,3,4,5,6]]
>
> but one actually gets [[2,3],[4,5],[6]] from the standard library
> implementation.
>
> The Haskell98 Report makes it clear that
>
>    "When the 'By' function replaces an Eq context by a
>     binary predicate, the predicate is assumed to define an
>     equivalence."
>
> Thus, the observed behavior is technically correct, or at
> least technically not incorrect.  The incp predicate does
> not follow the equivalence laws (it is neither symmetric nor
> reflexive), so groupBy is probably permitted to return most
> any result of the correct type.  What is actually happening
> is that the groupBy implementation is using span with a
> predicate (incp a) where a is the first element in the list.

If the comparison can be expensive on the first element, this
allows the possibility of caching some of that computation by
constructing a function that does the comparison.

I admit this is unlikely...

-- 
Aaron Denney
-><-



More information about the Libraries mailing list