
Hi,
I am looking for the decision making authority or a place where questions
about haskell libraries like in the email below can be asked or answered.
ghc-devs told me that their list is not the right place for this and
redirected me to haskell-cafe or libraries@haskell.org. I tried sending an
email to libraries@haskell.org but that seems to be a closed list, my email
got rejected, so that also does not seem like the right place. Is haskell
cafe the right place? I was under the impression that haskell-cafe is for
general discussions and not an owner of any of the libraries or any other
haskell code. Are there any other mailing lists that I am missing? I can
raise a ticket at ghc trac but I guess that cannot be the primary way to
ask simple questions.
-harendra
---------- Forwarded message ----------
From:
This is the wrong list. You probably meant to email haskell-cafe or perhaps libraries@haskell.org.
David Feuer Well-Typed, LLP
-------- Original message -------- From: Harendra Kumar
Date: 2/4/18 10:50 PM (GMT-05:00) To: ghc-devs@haskell.org Subject: rolling span and groupBy for lists Hi,
For a small problem, I was looking for a groupBy like function that groups based on a predicate on successive elements but I could not find one. I wrote these little functions for that purpose:
-- | Like span, but with a predicate that compares two successive elements. The -- span ends when the two successive elements do not satisfy the predicate. rollingSpan :: (a -> a -> Bool) -> [a] -> ([a], [a]) rollingSpan _ xs@[] = (xs, xs) rollingSpan _ xs@[_] = (xs, []) rollingSpan p (x1:xs@(x2:_)) | p x1 x2 = let (ys, zs) = rollingSpan p xs in (x1 : ys, zs) | otherwise = ([x1], xs)
-- | Like 'groupBy' but with a predicate that compares two successive elements. -- A group ends when two successive elements do not satisfy the predicate. rollingGroupBy :: (a -> a -> Bool) -> [a] -> [[a]] rollingGroupBy _ [] = [] rollingGroupBy cmp xs = let (ys, zs) = rollingSpan cmp xs in ys : rollingGroupBy cmp zs
Are there any existing functions that serve this purpose or is there any simpler way to achieve such functionality? If not, where is the right place for these, if any. Can they be included in Data.List in base?
Thanks, Harendra