Argh... I too have been up too late :-).  I edited THE WRONG FILE!  No wonder your change didn&#39;t take effect!  :-/<div><br></div><div>Time for coffee I suppose.<br><br><div class="gmail_quote">On Wed, Aug 19, 2009 at 8:38 AM, David Leimbach <span dir="ltr">&lt;<a href="mailto:leimy2k@gmail.com">leimy2k@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">This doesn&#39;t seem to be working for me interactively though on a Mac.  I still get &quot;Welcome&quot; before I&#39;ve entered text.<div>
<div></div><div class="h5"><br><br><div class="gmail_quote">On Wed, Aug 19, 2009 at 8:25 AM, Peter Verswyvelen <span dir="ltr">&lt;<a href="mailto:bugfact@gmail.com" target="_blank">bugfact@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I fixed it myself but it&#39;s really tricky :-)<div><br></div><div><a href="http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316#a8330" target="_blank">http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316#a8330</a></div>

<div><br></div><div><a href="http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316#a8330" target="_blank"></a>The idea is, that when the input is requested, the output that is then generated must be in sync with the input.</div>


<div><br></div><div><span style="font-family:-webkit-sans-serif;font-size:14px"><pre style="overflow-x:auto;overflow-y:auto;padding-left:5px"><span><span style="color:rgb(0, 96, 176);font-weight:bold">inp</span> <span style="color:rgb(0, 0, 0);font-weight:bold">=</span> <span style="color:rgb(48, 48, 144);font-weight:bold">S</span> <span style="color:rgb(48, 48, 48)">$</span> <span style="color:rgb(0, 96, 176);font-weight:bold">\</span><span>s</span> <span>i</span> <span style="color:rgb(0, 0, 0);font-weight:bold">-&gt;</span> <span style="color:rgb(0, 128, 0);font-weight:bold">let</span> <span>r</span> <span style="color:rgb(0, 0, 0);font-weight:bold">=</span> <span>(</span><span><b>s</b></span><b> </b><span><b>`</b></span><span style="color:rgb(48, 48, 144)"><b>D</b></span><span style="color:rgb(48, 48, 48)"><b>.</b></span><span><b>append</b></span><span><b>`</b></span><b> </b><span><b>(</b></span><span><b>i</b></span><b> </b><span><b>`</b></span><span><b>seq</b></span><span><b>`</b></span><b> </b><span style="color:rgb(48, 48, 144)"><b>D</b></span><span style="color:rgb(48, 48, 48)"><b>.</b></span><span><b>empty</b></span><span><b>)</b>,</span> <span>head</span> <span>i</span><span>)</span> <span style="color:rgb(0, 128, 0);font-weight:bold">in</span> <span>(</span><span>tail</span> <span>i</span><span>,</span> <span>r</span><span>)</span>
</span></pre><pre style="overflow-x:auto;overflow-y:auto;padding-left:5px"><br></pre><pre style="overflow-x:auto;overflow-y:auto;padding-left:5px"><span style="font-family:arial;font-size:13px;white-space:normal"><div>
I first had</div><div><span style="font-family:-webkit-sans-serif;font-size:14px"><pre style="overflow-x:auto;overflow-y:auto;padding-left:5px"><span><span style="color:rgb(0, 96, 176);font-weight:bold">inp</span> <span style="color:rgb(0, 0, 0);font-weight:bold">=</span> <span style="color:rgb(48, 48, 144);font-weight:bold">S</span> <span style="color:rgb(48, 48, 48)">$</span> <span style="color:rgb(0, 96, 176);font-weight:bold">\</span><span>s</span> <span>i</span> <span style="color:rgb(0, 0, 0);font-weight:bold">-&gt;</span> <span style="color:rgb(0, 128, 0);font-weight:bold">let</span> <span>r</span> <span style="color:rgb(0, 0, 0);font-weight:bold">=</span> <span>(i `seq` </span><span><b>s</b></span><span>,</span> <span>head</span> <span>i</span><span>)</span> <span style="color:rgb(0, 128, 0);font-weight:bold">in</span> <span>(</span><span>tail</span> <span>i</span><span>,</span> <span>r</span><span>)</span>
</span></pre><div><font face="-webkit-monospace"><span style="white-space:pre"><br></span></font></div><div><span style="white-space:pre"><font face="arial, helvetica, sans-serif">But that was too eager, since i syncs the input not with the output, but with the function that will generate the output.</font></span></div>


<div><span style="white-space:pre"><font face="arial, helvetica, sans-serif"><br></font></span></div><div><span style="white-space:pre"><font face="arial, helvetica, sans-serif">Okay, now I can sleep again :-)</font></span></div>


<div><font face="-webkit-monospace"><span style="white-space:pre"><br></span></font></div></span></div></span></pre><div><font face="-webkit-monospace"><span style="white-space:pre"><br>
</span></font></div></span><div><div></div><div><div><br><div><br><div class="gmail_quote">On Wed, Aug 19, 2009 at 5:12 PM, Peter Verswyvelen <span dir="ltr">&lt;<a href="mailto:bugfact@gmail.com" target="_blank">bugfact@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks, but that doesn&#39;t really matter in my example, my code is just buggy, and I&#39;m not sure why. For example if I change my test function so that it outputs lines only, then it still prints Welcome first before asking for input. <div>



<br></div><div>See e.g. <a href="http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316#a8328" target="_blank">http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316#a8328</a></div><div><div></div><div><div><br></div>
<div>On Wed, Aug 19, 2009 at 5:00 PM, David Leimbach <span dir="ltr">&lt;<a href="mailto:leimy2k@gmail.com" target="_blank">leimy2k@gmail.com</a>&gt;</span> wrote:</div>
<div><div><div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Try LineBuffering.<div><br></div><div>I do linewise stuff with interact a lot.  You&#39;ll find stuff like</div>



<div><br></div><div>unlines . lines</div><div><br></div><div>may help too.  In fact I just wrote a blog post about this.</div>
<div><br></div><div><a href="http://leimy9.blogspot.com" target="_blank">http://leimy9.blogspot.com</a></div><div><br></div><div>I&#39;m trying to write some interactive code to automate working with serial console controlled power strips, so I need to either use Expect (yuck) or do my own thing.</div>




<div><br></div><div>Dave<br><br><div class="gmail_quote"><div><div></div><div>On Wed, Aug 19, 2009 at 7:35 AM, Peter Verswyvelen <span dir="ltr">&lt;<a href="mailto:bugfact@gmail.com" target="_blank">bugfact@gmail.com</a>&gt;</span> wrote:<br>



</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div>
Apparently this particular example happens to work on Mac and Linux because of different buffering (thanks Martijn for the help!)<div><div><br></div><div>To make sure we have no buffering at all, the main function should be:</div>





<div><span style="font-family:-webkit-sans-serif;font-size:14px"><pre style="overflow-x:auto;overflow-y:auto;padding-left:5px"><span><span style="color:rgb(0, 96, 176);font-weight:bold">main</span> <span style="color:rgb(0, 0, 0);font-weight:bold">=</span> <span style="color:rgb(0, 128, 0);font-weight:bold">do</span>
</span><span>  <span>hSetBuffering</span> <span>stdout</span> <span style="color:rgb(48, 48, 144);font-weight:bold">NoBuffering</span>
</span><span>  <span>hSetBuffering</span> <span>stdin</span> <span style="color:rgb(48, 48, 144);font-weight:bold">NoBuffering</span>
</span><span>  <span>test</span></span></pre></span>Now I think it should also be <b>incorrect</b> on Unix systems.</div><div><br></div><div>I guess the way I&#39;m concatenating the strings is not correct, not sure.</div>





<div><br></div><div>I would like to use a graphical tool to show the graph reduction step by step, to get a better understanding of the laziness &amp; strictness. Does such a tool exist? I know people often say this is not usable because the amount of information is too much, but I used to be an assembly language programmer so I still would like to give it a try :-)</div>




<div><div></div><div>

<div><br></div><div><br></div><div><br></div><div><div class="gmail_quote">On Wed, Aug 19, 2009 at 1:07 PM, Peter Verswyvelen <span dir="ltr">&lt;<a href="mailto:bugfact@gmail.com" target="_blank">bugfact@gmail.com</a>&gt;</span> wrote:<br>






<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">In an attempt to get a deeper understanding of several monads (State, ST, IO, ...) I skimmed over some of the research papers (but didn&#39;t understand all of it, I lack the required education) and decided to write a little program myself without using any prefab monad instances that should mimic the following:<div>







<br></div><div><div><font face="&#39;courier new&#39;, monospace"><span style="font-size:large">main = do</span></font></div><div><font face="&#39;courier new&#39;, monospace"><span style="font-size:large">  putStrLn &quot;Enter your name:&quot;</span></font></div>







<div><font face="&#39;courier new&#39;, monospace"><span style="font-size:large">  x &lt;- getLine</span></font></div><div><font face="&#39;courier new&#39;, monospace"><span style="font-size:large">  putStr &quot;Welcome &quot;</span></font></div>







<div><font face="&#39;courier new&#39;, monospace"><span style="font-size:large">  putStrLn x</span></font></div><div><font face="&#39;courier new&#39;, monospace"><span style="font-size:large">  putStrLn &quot;Goodbye!&quot;</span></font></div>







<div><div><font face="&#39;courier new&#39;" size="4"><span style="font-size:16px"><br></span></font></div><div><font face="&#39;courier new&#39;" size="4"><span style="font-size:16px"><span style="font-family:arial;font-size:13px">But instead of using IO, I wanted to make my own pure monad that gets evaluated with interact, and does the same.</span></span></font></div>







<div><br></div><div>However, I get the following output:</div><div><br></div><div>Enter your name:</div><div>Welcome ......</div><div><br></div><div>So the Welcome is printed too soon.</div><div><br></div><div>This is obvious since my monad is lazy, so I tried to put a seq at some strategic places to get the same behavior as IO. But I completely failed doing so, either the program doesn&#39;t print anything and asks input first, or it still prints too much output.</div>







<div><br></div><div>Of course I could just use ST, State, transformers, etc, but this is purely an exercise I&#39;m doing.</div><div><br></div><div>So, I could re-read all papers and look in detail at all the code, but maybe someone could help me out where to put the seq or what to do :-)</div>







<div><br></div><div>The code is at <a href="http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316" target="_blank">http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316</a></div><div><br></div><div>Oh btw, the usage of DList here might not be needed; intuitively it felt like the correct thing to do, but when it comes to Haskell, my intuition is usually wrong ;-)</div>







<div><br></div><div>Thanks a lot,</div><div>Peter Verswyvelen</div><div><br></div></div></div>
</blockquote></div><br></div>
</div></div></div>
<br></div></div>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div>
</div></div></blockquote></div><br></div></div></div></div></div>
</blockquote></div><br>
</div></div></blockquote></div><br></div>