Why doesn't Haskell sequence these IO actions properly?

后端 未结 2 1077
醉酒成梦
醉酒成梦 2020-11-29 11:08

A friend of mine asked me why was I learning Haskell. To demonstrate the power of Haskell I wrote a small program which displayed a list of prime numbers:

ma         


        
相关标签:
2条回答
  • 2020-11-29 11:40

    stdin and stdout are two different files that needn't have any connection. Take e.g. the Unix shell command grep:

    $ seq 1 100 | grep 2$ | less
    

    seq 1 100 prints the numbers 1 to 100 to its stdout which is greps stdin (| connects the stdout of one command to the stdin of an other). grep then writes the lines that match the given regex to its stdout which is lesss stdin.

    To force stdout (or any other file) to be written use hFlush from System.IO:

     hFlush stdout
    
    0 讨论(0)
  • 2020-11-29 11:47

    This looks more like a buffering than a sequencing problem. What platform are you on? Have you tried forcing unbuffered output?

    hSetBuffering stdout NoBuffering -- from System.IO
    
    0 讨论(0)
提交回复
热议问题