[Haskell-cafe] Why isn't there a cheaper "split-in-two" operation
for Data.Set?
Ryan Newton
newton at mit.edu
Tue Oct 19 05:47:05 EDT 2010
That sounds good to me. In any case the parallel map/fold operations by
themselves shouldn't compromise the abstraction.
Perhaps an eventual solution would be to start including parallel maps/folds
right inside the standard libraries. I haven't began testing this yet but
it would seem that all the balanced tree implementations are good candidates
for a little `par` treatment. Has this been tried somewhere already?
Alas, having par/nonpar versions of library functions compounds the
already present monadic/non-monadic schism...
Anyway, right this second I'm primarily interested in speeding up difference
and intersection -- that would be really useful for a simple utility I've
been using that compares files as Maps of word-tuples and runs rather slowly
(http://hackage.haskell.org/package/wordsetdiff).
Cheers,
-Ryan
On Mon, Oct 4, 2010 at 11:00 AM, Bertram Felgenhauer <
bertram.felgenhauer at googlemail.com> wrote:
> Ryan Newton wrote:
> > Would there be anything wrong with a Data.Set simply chopping off half
> its
> > (balanced) tree and returning two approximately balanced partitions
> ...
> > cleave :: Set a -> (Set a, Set a)
> > cleave Tip = (Tip, Tip)
> > cleave (Bin _ x l r)
> > | size l > size r = (l, insertMin x r)
> > | otherwise = (insertMax x l, r)
>
> This function would expose some of the internal structure of Set - i.e.
> there could be equal sets s1 == s2 with cleave s1 /= cleave s2.
>
> Maybe a better idea than to expose such a function would be to split
> Data.Set into Data.Set.Internal and Data.Set, where Data.Set.Internal
> would export the actual Tip and Bin constructors. Then people who want
> to break the abstraction, for example to experiment with parallel folds,
> could do that easily.
>
> regards,
>
> Bertram
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20101019/5c1fd7b2/attachment.html
More information about the Haskell-Cafe
mailing list