相关疑难解决方法(0)

错误的IO操作使用putStr和getLine进行排序

我有以下代码:

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,还是它应该工作的方式?

io haskell buffering ghc

38
推荐指数
1
解决办法
3015
查看次数

执行顺序(>> =)不是我的预期

我有一系列网络请求,每个请求大于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,"下载"不打印直到"完成".

我用(>> =)和(>>)重写了它,但是我遇到了同样的问题.

这是怎么回事?

monads haskell do-notation

9
推荐指数
1
解决办法
231
查看次数

在记事本++中的Haskell控制台IO

我最近开始学习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 notepad++

4
推荐指数
1
解决办法
2142
查看次数

提示消息在已编译的可执行文件中消失?

我有一个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中实现了一个无限注册机器 …

haskell

0
推荐指数
1
解决办法
164
查看次数

标签 统计

haskell ×4

buffering ×1

do-notation ×1

ghc ×1

io ×1

monads ×1

notepad++ ×1