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 <diaz.c...@gmail.com > <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 haskell-pipe...@googlegroups.com <javascript:>. > To post to this group, send email to haskel...@googlegroups.com > <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 haskell-pipes+unsubscr...@googlegroups.com. To post to this group, send email to haskell-pipes@googlegroups.com.