My main comment is that this would be really valuable if you kept expanding out the last part (Section 7) so that it was a tree of `M`s and then show how `runEffect` collapsed those `M`s into a single `IO` action.

I did something very similar for my Stanford pipes lecture and it went over really well. People *really* like seeing the syntax trees that pipes expand out to and understanding how the composition operators fuse the syntax trees together.

You can check out the first section of the slides, which you can find here:

http://www.scs.stanford.edu/14sp-cs240h/slides/pipes-slides.html#%281%29

You'll see that I did something very similar, except for a `Producer`-only subset of `pipes`. Once people understand how the `do` notation translates to syntax trees they usually "get it".

On 5/23/14, 3:33 PM, Chris Mahon wrote:
That's an error - thx for letting me know - should be:

yield 1 >> yield 2, etc.

I have updated the article.

On Saturday, May 24, 2014 7:59:56 AM UTC+10, Pierre R wrote:

    Are you sure this part is correct  (the 1 becomes 2, ...) ?

    |yield  ::  Monad  m  =>  a  ->  Proxy  x'  x  a'  a  m  a'
    yield  a  =  Respond  a  Pure

    producer''  ::  Proxy  X  ()  ()  Int  IO  ()
producer''
       =  yield  1  >>  yield  1
= yield 1 >>= \_ -> yield 1 = Respond 1 Pure >>= \_ -> Respond 1 Pure = Respond 1 (\v -> Pure v >>= \_ -> Respond 2 Pure) = Respond 1 (\v -> Pure v >>= \_ -> Respond 2 (\v' -> Pure v'))
    |

    Cheers

    On Friday, May 23, 2014 4:35:12 AM UTC+2, Chris Mahon wrote:

        I completed the unfinished parts of the article, mainly the
        reduction of the sample effect at the end. Will update with
        any feedback. thx, Chris

        On Thursday, May 22, 2014 8:21:32 AM UTC+10, Gabriel Gonzalez
        wrote:

            Alright, then I will try to complete the bidirectional
            tutorial as soon as possible.

            On 5/21/14, 7:13 AM, Chris Mahon wrote:
            Thanks for those links, very interesting. I'll shelve
            that idea for a bi-directional article then - look
            forward to your tutorial on the subject - I'm not sure I
            would have had much to write on the subject anyway.

            On Wednesday, May 21, 2014 11:12:09 PM UTC+10, Gabriel
            Gonzalez wrote:

                I'm still reading your article, and I will give more
                comments later today, but I just wanted to mention
                that there used to be a bidirectional pipes tutorial
                back in the 3.* cycle:

                
https://hackage.haskell.org/package/pipes-3.3.0/docs/Control-Proxy-Tutorial.html#g:2
                
<https://hackage.haskell.org/package/pipes-3.3.0/docs/Control-Proxy-Tutorial.html#g:2>

                I deleted in the transition to 4.0.0, mainly because
                people were complaining about the high complexity of
                `pipes` and one of the goals of the 4.0.0 release was
                to show that you could program entirely in a
                unidirectional subset of `pipes`.  However, I plan to
                add a bidirectional tutorial back again soon.

                You might also find this Stack Overflow answer I
                wrote helpful:

                
http://stackoverflow.com/questions/23185690/event-handler-stack/23187159#23187159
                
<http://stackoverflow.com/questions/23185690/event-handler-stack/23187159#23187159>

                On 5/21/14, 4:38 AM, Chris Mahon wrote:
                Hi all,

                I'm working on an article titled pipes deconstructed
                <http://cmahon.github.io/posts/pipes-deconstructed/>
                and would really appreciate feedback before I put
                the final touches on it. My aim is to explain the
                underlying co-routine mechanics via a reduction of a
                simple example to Proxy form. While I found it
                useful to get to grips with the pipes implementation
                for my own edification, I'm really not sure whether
                anyone else would find this level of detail useful
                so apart from any comments on style, correctness,
                etc., please let me know if I'm off on a
                self-indulgent tangent of no wider interest!

                Was also thinking of writing a short article
                illustrating bi-directional pipes usage as I
                couldn't find much detail on the subject in the
                pipes tutorial and I leaned how to send data
                upstream while digging into the pipes code. Simple
                example towards the end of a short note I just wrote
                on fix. <http://cmahon.github.io/notes/haskell/#fix>

                I've just created my blog and the limited content
                that's there is all work in progress at the moment
                so a bit rough and ready in places.

                Anyway, thanks in advance for your help,

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

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

--
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] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.

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