<div dir="ltr">Why do I suddenly catch a whiff of <a href="https://xkcd.com/927/">https://xkcd.com/927/</a> ?</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 5, 2018 at 1:13 PM, Harendra Kumar <span dir="ltr"><<a href="mailto:harendra.kumar@gmail.com" target="_blank">harendra.kumar@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">According to hayoo there seem to be 7 different implementations of this same function. Yours is 8th and mine is 9th and other people may have more not uploaded or maybe the ones that hayoo is not able to find. Does that make a case for including this in some standard place?<span class="HOEnZb"><font color="#888888"><div><br></div></font></span><div><span class="HOEnZb"><font color="#888888">-harendra<br></font></span><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On 5 February 2018 at 12:22, Evan Laforge <span dir="ltr"><<a href="mailto:qdunkan@gmail.com" target="_blank">qdunkan@gmail.com</a>></span> wrote:<br></span><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have my own list library with a bunch of things like this.  I think<br>
it's what most people do, and some upload them to hackage, e.g.<br>
utility-ht or the split package, or data-ordlist.<br>
<br>
Specifically, I think rollingGroupBy is what I call splitWith:<br>
<br>
-- | Split @xs@ before places where @f@ matches.<br>
--<br>
-- > split_with (==1) [1,2,1]<br>
-- > --> [[], [1, 2], [1]]<br>
split_with :: (a -> Bool) -> [a] -> NonNull [a]<br>
    -- ^ output is non-null, and the contents are also, except the first one<br>
<br>
You can probably find something like this in 'split', or if not, that<br>
might be a good place to contribute it.<br>
<br>
I have a bunch of grouping functions too, which I use all the time, so<br>
if there's some kind of general list grouping package then maybe I<br>
could put them there.<br>
<br>
On the other hand, this sort of thing is pretty individual, so it<br>
doesn't seem so bad for each person to have their own local library.<br>
That way you know it fits your style.  Ultimately I think that's why<br>
none of the split functions made it into Data.List, every person has a<br>
slightly different idea of what it should be.<br>
<div><div class="m_4601830659689236100h5"><br>
On Sun, Feb 4, 2018 at 7:50 PM, Harendra Kumar <<a href="mailto:harendra.kumar@gmail.com" target="_blank">harendra.kumar@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> For a small problem, I was looking for a groupBy like function that groups<br>
> based on a predicate on successive elements but I could not find one. I<br>
> wrote these little functions for that purpose:<br>
><br>
> -- | Like span, but with a predicate that compares two successive elements.<br>
> The<br>
> -- span ends when the two successive elements do not satisfy the predicate.<br>
> rollingSpan :: (a -> a -> Bool) -> [a] -> ([a], [a])<br>
> rollingSpan _ xs@[] = (xs, xs)<br>
> rollingSpan _ xs@[_] = (xs, [])<br>
> rollingSpan p (x1:xs@(x2:_))<br>
>     | p x1 x2 =<br>
>         let (ys, zs) = rollingSpan p xs<br>
>         in (x1 : ys, zs)<br>
>     | otherwise = ([x1], xs)<br>
><br>
> -- | Like 'groupBy' but with a predicate that compares two successive<br>
> elements.<br>
> -- A group ends when two successive elements do not satisfy the predicate.<br>
> rollingGroupBy :: (a -> a -> Bool) -> [a] -> [[a]]<br>
> rollingGroupBy _ [] = []<br>
> rollingGroupBy cmp xs =<br>
>     let (ys, zs) = rollingSpan cmp xs<br>
>     in ys : rollingGroupBy cmp zs<br>
><br>
> Are there any existing functions that serve this purpose or is there any<br>
> simpler way to achieve such functionality? If not, where is the right place<br>
> for these, if any. Can they be included in Data.List in base?<br>
><br>
> Thanks,<br>
> Harendra<br>
><br>
</div></div>> ______________________________<wbr>_________________<br>
> ghc-devs mailing list<br>
> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/ghc-devs</a><br>
><br>
</blockquote></div></div></div><br></div></div></div>
<br>______________________________<wbr>_________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/ghc-devs</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div>