On Saturday, August 19, 2017 at 6:34:21 PM UTC+2, Gabriel Gonzalez wrote: > > What is the motivation for `delimit`/delimitM`? Are these designed to be > utilities for building group-like functions? >
Yes. I'm trying to use Backpack to create an abstract common interface to pipes / streaming / conduit: https://github.com/danidiaz/streamy I don't want to expose a single-stepping function like "next", but I would still like to be able to define complex splitters using only the abstract signature. > Also, the `FreeT` trick can be applied to `ConduitM`, although not `Source` > Interesting, so perhaps it would be possible to implement a conduit-group package... > > On Aug 17, 2017, at 5:47 PM, Daniel Díaz <[email protected] > <javascript:>> wrote: > > Hi, > > The pipes-group and streaming libraries both give you functions like > "group", "groupBy" and "chunksOf" that let you segment a stream while > preserving streaming. I was thinking of implementing these two additional > functions: > > delimit :: (x -> a -> (x,NonEmpty [b])) > -> x > -> (x -> NonEmpty [b]) > -> Stream (Of a) m r > -> Stream (Stream (Of b) m) m r > > delimitM :: (x -> a -> Stream (Of b) m (Stream (Stream (Of b) m) m x)) > -> m x > -> (x -> Stream (Of b) m (Stream (Stream (Of b) m) m ())) > -> Stream (Of a) m r > -> Stream (Stream (Of b) m) m r > > > For "delimit", the idea is that every step produces a NonEmpty list of > lists along with the new internal state. The list at the head would consist > of elements belonging to the "current open group". If there are more lists > afterwards, they represent new groups which have been detected in the > stream. For streams comprising one single continuous group, the NonEmptys > would *always* contain just one list. > > "delimitM" is the monadic version, although here the types start getting > quite scary. > > What do you think? Would "delimit" make sense, or at this level of > complexity it would be better to build the splitting function by > single-stepping the source stream? > > (Extra semi-related question: could the FreeT trick used in pipes-group > also be applied to Sources from the conduit library?) > > -- > You received this message because you are subscribed to the Google Groups > "Haskell Pipes" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <javascript:>. > To post to this group, send email to [email protected] > <javascript:>. > > > -- You received this message because you are subscribed to the Google Groups "Haskell Pipes" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected].
