Why do I suddenly catch a whiff of https://xkcd.com/927/ ?
On Mon, Feb 5, 2018 at 1:13 PM, Harendra Kumar <harendra.ku...@gmail.com> wrote: > 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? > > -harendra > > On 5 February 2018 at 12:22, Evan Laforge <qdun...@gmail.com> wrote: > >> I have my own list library with a bunch of things like this. I think >> it's what most people do, and some upload them to hackage, e.g. >> utility-ht or the split package, or data-ordlist. >> >> Specifically, I think rollingGroupBy is what I call splitWith: >> >> -- | Split @xs@ before places where @f@ matches. >> -- >> -- > split_with (==1) [1,2,1] >> -- > --> [[], [1, 2], [1]] >> split_with :: (a -> Bool) -> [a] -> NonNull [a] >> -- ^ output is non-null, and the contents are also, except the first >> one >> >> You can probably find something like this in 'split', or if not, that >> might be a good place to contribute it. >> >> I have a bunch of grouping functions too, which I use all the time, so >> if there's some kind of general list grouping package then maybe I >> could put them there. >> >> On the other hand, this sort of thing is pretty individual, so it >> doesn't seem so bad for each person to have their own local library. >> That way you know it fits your style. Ultimately I think that's why >> none of the split functions made it into Data.List, every person has a >> slightly different idea of what it should be. >> >> On Sun, Feb 4, 2018 at 7:50 PM, Harendra Kumar <harendra.ku...@gmail.com> >> wrote: >> > 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 >> > >> > _______________________________________________ >> > ghc-devs mailing list >> > ghc-devs@haskell.org >> > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >> > >> > > > _______________________________________________ > ghc-devs mailing list > ghc-devs@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs > > -- brandon s allbery kf8nh sine nomine associates allber...@gmail.com ballb...@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs