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].

Reply via email to