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/