List Grouping module released
EDIT: Don’t use this package, but use instead Data.List.Split by Brent Yorgey. I didn’t see that a package like his existed! This module will hopefully be removed from hackage if they can do that.
I just finished the initial release of a simple module called list-grouping that contains functions to partition a list into sub-lists in various ways, based on some predicate or integer offset. Functions like these are a little awkward to write and I was surprised when I didn’t see anything on hackage!
Check out the package description and install it with:
$ cabal install list-grouping
Here is an example from a previous post to build a binary tree from an in-order list, which uses the above library:
module Main where import Data.List.Grouping data Tree a = Node a (Tree a) (Tree a) | End deriving Show fromSorted :: [a] -> Tree a fromSorted = foldl mkTree End . splitWith [2^n | n<-[0..]] where mkTree l (n:ns) = Node n l (fromSorted ns)
I’m sure the functions can be made more efficient, to take advantage of fusion or what-not, and I hope the library will eventually contain the most efficient implementations possible.
I also am looking for suggestions for other useful list grouping functions to include. Send your suggestions along! You can get the darcs source with:
$ git clone https://github.com/jberryman/ListGrouping/