我正在玩Haskell中的一个简单程序:
hello :: String -> String
hello s = "Hello, " ++ (trim s) ++ "!\n"
trim :: String -> String
trim [] = []
trim s = head $ words s
main :: IO()
main = do putStr "\nPlease enter your name: "
name <- getLine
hstring <- return $ hello name
putStr hstring
这是我期待的输出:
Please enter your name: John Doe
Hello, John!
当我将程序加载到ghci时,这可以正常工作。但是当我使用
编译程序时ghc -o hello.exe hello.hs
启动,等待输入,然后同时打印两个提示:
John Doe
Please enter your name: Hello, John!
为什么交互式环境和编译器之间的行为有所不同,我如何让编译器做我想做的事?
提前感谢您的帮助!
答案 0 :(得分:8)
这是常见问题解答。你的线路正在缓冲。使用:
import System.IO
main = do
hSetBuffering stdout NoBuffering
...
此外,您的代码有点......独一无二。例如,你说:
hstring <- return $ hello name
putStr hstring
当你能做到:
let hstring = hello name
putStr hstring
或只是:
putStr $ hello name