jepalomar23: > Hi, > I am newbie in Haskell and do not understand why the interpreted mode > differs from the compiled program. > I run this code > main = do > putStr "line1" > x<-getLine > putStr "line2" > y<-getLine > return (x++y) > > either under runhugs or runghc or in a console under ghci and works > properly, that is, first displays "line1" and then prompts for the > corresponding inputs through the keyboard, and so on. However, if I > compile the code with the command line > ghc --make Main.hs -o main > and launch the compiled program main, then at first prompts for the > input lines through the keyboard and then displays the strings "line1" > "line2".
> I have read in the tutorials that the command "do" implies an ordered > execution and this only occurs in interpreted mode. > Using the monadic notation >> , >>= occurs the same unordered behavior. > ?How can I avoid the unordered execution of this code in a compiled > program? Sounds like the difference in buffering between the interactive environments and compiled code. Try: import System.IO main = do hSetBuffering stdout NoBuffering putStr "line1 " x <- getLine putStr "line2 " y <- getLine print (x++y) Running this: $ ./a.out line1 1 line2 2 "12" -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe