相关疑难解决方法(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
查看次数

为什么我的IO没有按顺序执行?

我遇到的问题是IO没有按顺序执行,即使在do构造中也是如此.

在下面的代码中,我只是跟踪剩下的卡片,卡片是一个字符元组(一个用于套装,一个用于值)然后用户不断被问到已经播放了哪些卡片.我希望putStr在每个输入之间执行,而不是像现在这样在最后执行.

module Main where
main = doLoop cards
doLoop xs = do  putStr $ show xs
                s <- getChar
                n <- getChar
                doLoop $ remove (s,n) xs
suits = "SCDH"
vals = "A23456789JQK"
cards = [(s,n) | s <- suits, n <- vals]
type Card = (Char,Char)
remove :: Card -> [Card] -> [Card]
remove card xs = filter (/= card) xs
Run Code Online (Sandbox Code Playgroud)

io haskell buffering

5
推荐指数
3
解决办法
813
查看次数

标签 统计

buffering ×2

haskell ×2

io ×2

ghc ×1