[Haskell-cafe] ANNOUNCE: pipes-core 0.0.1

Mario Blažević blamario at acanac.net
Sun Mar 11 05:53:02 CET 2012

On 12-03-10 09:05 PM, Twan van Laarhoven wrote:
> On 2012-03-11 00:09, Mario Blažević wrote:
>> On 12-03-10 05:19 PM, Twan van Laarhoven wrote:
>>> -- | Pass some unconsumed input back upstream.
>>> -- The next @await@ will return this input without blocking.
>>> unawait :: Monad m => a -> Pipe a b m ()
>> The function may be called unawait, but there's nothing stopping you 
>> from
>> inserting something into the stream that wasn't in the input to start 
>> with. I
>> find that this approach breaks too many invariants.
> Which invariants does it break exactly? I.e. what properties do you 
> expect to hold that fail when you can push arbitrary values back 
> up-stream?

     Are you asking for a written-up set of Pipe laws? I'm not aware of 
any, and I'd love to see one.
The Category law would be broken, though:

unawait x >>> id == yield x !== unawait x

     I suppose the additional Arrow laws, if they were transcribed to 
the pseudo-Arrow operations that Pipe supports, would be broken as well.

More information about the Haskell-Cafe mailing list