我有以下代码:
main = do
putStr "Test input : "
content <- getLine
putStrLn content
Run Code Online (Sandbox Code Playgroud)
当我运行它(带runhaskell)或编译它(ghc 6.10.4)时,结果是这样的:
asd
Test input : asd
Run Code Online (Sandbox Code Playgroud)
为什么要Test input : asd在之后打印asd?
在的代码示例http://learnyouahaskell.com/,它使用putStr,所述getLine的呈现输出比我的不同.当我使用putStrLn该程序按预期工作(打印,然后提示,并打印).
它是一个错误ghc,还是它应该工作的方式?
我有一系列网络请求,每个请求大于10秒.
为了让用户知道发生了什么,我给出了更新:
main = do putStr "Downloading the first thing... "
{- Net request -}
putStrLn "DONE"
putStr "Downloading the second thing... "
{- Net request -}
putStrLn "DONE"
Run Code Online (Sandbox Code Playgroud)
使用GHCi,这可以按预期工作,但编译或使用runghc,"下载"不打印直到"完成".
我用(>> =)和(>>)重写了它,但是我遇到了同样的问题.
这是怎么回事?
我最近开始学习Haskell.我有这个代码
module Main
where
import IO
main = do
hSetBuffering stdin LineBuffering
putStrLn "Please enter your name: "
name <- getLine
putStrLn ("Hello, " ++ name ++ ", how are you?")
Run Code Online (Sandbox Code Playgroud)
我正在使用GHC编译器和notepad ++编辑器.问题是交互是这样的:
流程开始>>>
弗拉德
请输入你的名字:
你好,弗拉德,你好吗?
<<<流程完成.
如您所见,输出仅在我输入内容后写入.这有点出乎意料,因为我确信程序会首先询问我的名字,然后我会进入它然后它会打招呼.好吧,如果我手动运行exe就会发生这种情况,但是如果我用notepad ++运行它并使用它的控制台包装器就不行了......
如何让notepad ++显示输出,而不是在程序终止之前显示所有输出?这甚至可能吗?
我有一个Haskell程序,它显示一个提示,然后从命令行接受输入.我这样做是:
main = do putStr "Please enter program source file name: "
programFileName <- getLine
programFileHandle <- openFile programFileName ReadMode
program <- hGetContents programFileHandle
putStr "Please enter initial file configuration file name: "
initConfigFileName <- getLine
initConfigFileHandle <- openFile initConfigFileName ReadMode
initConfigStr <- hGetContents initConfigFileHandle
print (evaluateProgram (lines program) (readReg initConfigStr))
Run Code Online (Sandbox Code Playgroud)
当我在GHCi解释器上运行它时,提示显示正常,我能够输入我的输入(以及其他所有工作).
例如*Main> main请输入程序源文件名:sum.urm请输入初始文件配置文件名:sum.conf 9
当我编译它时(在Mac OS X或Windows上),它会生成一个不显示我的提示的可执行文件.它等待两个输入字符串,然后一旦我输入了有效的文件名,它就会输出提示和结果.
例如
$ ./a.out
sum.urm
sum.conf
Please enter program source file name: Please enter initial file configuration file name: 9
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?
好奇的是,我在Haskell中实现了一个无限注册机器 …