[Haskell-cafe] Re: Where do I put the seq?

David Leimbach leimy2k at gmail.com
Wed Aug 19 11:00:48 EDT 2009

Try LineBuffering.
I do linewise stuff with interact a lot.  You'll find stuff like

unlines . lines

may help too.  In fact I just wrote a blog post about this.


I'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.


On Wed, Aug 19, 2009 at 7:35 AM, Peter Verswyvelen <bugfact at gmail.com>wrote:

> Apparently this particular example happens to work on Mac and Linux because
> of different buffering (thanks Martijn for the help!)
> To make sure we have no buffering at all, the main function should be:
> main = do  hSetBuffering stdout NoBuffering  hSetBuffering stdin NoBuffering  test
> Now I think it should also be *incorrect* on Unix systems.
> I guess the way I'm concatenating the strings is not correct, not sure.
> I would like to use a graphical tool to show the graph reduction step by
> step, to get a better understanding of the laziness & 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 :-)
> On Wed, Aug 19, 2009 at 1:07 PM, Peter Verswyvelen <bugfact at gmail.com>wrote:
>> In an attempt to get a deeper understanding of several monads (State, ST,
>> IO, ...) I skimmed over some of the research papers (but didn'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:
>> main = do
>>   putStrLn "Enter your name:"
>>   x <- getLine
>>   putStr "Welcome "
>>   putStrLn x
>>   putStrLn "Goodbye!"
>> But instead of using IO, I wanted to make my own pure monad that gets
>> evaluated with interact, and does the same.
>> However, I get the following output:
>> Enter your name:
>> Welcome ......
>> So the Welcome is printed too soon.
>> 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't print anything and asks input first, or
>> it still prints too much output.
>> Of course I could just use ST, State, transformers, etc, but this is
>> purely an exercise I'm doing.
>> 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 :-)
>> The code is at http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316
>> 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 ;-)
>> Thanks a lot,
>> Peter Verswyvelen
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090819/052c216c/attachment.html

More information about the Haskell-Cafe mailing list