<div dir="ltr">I suspect you need to post this somewhere besides Haskell-Beginners. Good luck.<div class="gmail_extra"><br clear="all"><div>Tim</div><br><div class="gmail_quote">On Mon, Jan 27, 2014 at 6:31 AM, Kilian Gebhardt <span dir="ltr"><<a href="mailto:kilian.gebhardt@mailbox.tu-dresden.de" target="_blank">kilian.gebhardt@mailbox.tu-dresden.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  

    
  
  <div text="#000000" bgcolor="#FFFFFF">
    Hi, <br>
    I'm working through Simon Marlows Parallel and Concurrent
    Programming in Haskell. <br>
    In Chapter 4, p. 69, or
    
    <a href="http://chimera.labs.oreilly.com/books/1230000000929/ch04.html#_rate_limiting_the_producer" target="_blank">http://chimera.labs.oreilly.com/books/1230000000929/ch04.html#_rate_limiting_the_producer</a>
    there is the task to extend a stream processing module based on
    Control.Monad.Par in such a way that the producer is rate-limited,
    i.e. the producer should not produce more than the consumer can
    consume.<br>
    <br>
    The book suggests the following type: <br>
    data IList a <br>
        = Nil<br>
        | Cons a (IVar (IList a))<br>
        | Fork (Par ()) (IList a)<br>
    <br>
    I struggle to construct the functions for this type, as I don't know
    what to do with the IList in the Fork case. It seems more natural to
    me, to have an IVar (IList a) instead, whose value is provided by
    the computation in Par () in the following way:<br>
    <br>
    Fork (Par ()) (IVar (IList a))<br>
    <br>
    
    streamFromListLimited :: NFData a => Int -> Int -> [a]
    -> Par (Stream a)<br>
    streamFromListLimited f d xs = do<br>
        var <- new<br>
        fork $ loop f xs var<br>
        return var<br>
      where<br>
        loop :: NFData a => Int -> [a] -> Stream a -> Par ()<br>
        loop _ []     var = put var Nil<br>
        loop 0 (x:xs) var = do<br>
            tail <- new<br>
            put var (Fork (loop d xs tail) tail) <br>
        loop n (x:xs) var = do <br>
            tail <- new<br>
            put var (Cons x tail)<br>
            loop (n-1) xs tail<br>
    <br>
    Can someone give me a hint? <br>
    Thanks, <br>
    Kilian<br>
  </div>

<br>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br></div></div>