首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getLine功能与GHCi与runhaskell的区别

getLine功能与GHCi与runhaskell的区别
EN

Stack Overflow用户
提问于 2014-01-14 13:00:28
回答 1查看 2.1K关注 0票数 18

我只是偶然发现了一件我不明白的事。

如果我使用的是GHCi并使用getLine,我将得到以下信息

代码语言:javascript
复制
Prelude> a <- getLine
Test<Backspace>oo<CR> -- the Backspace action results in a '^?'
Prelude> a
"Test\DELoo"

如果我在Haskell文件中写入相同的

代码语言:javascript
复制
module Main where

main :: IO ()
main = do a <- getLine
          putStrLn a

并使用runhaskell运行脚本并输入相同的输入,backspace将按预期删除't‘。

为什么会有区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-14 13:08:01

这是由于不同的缓冲行为在GHCi和GHC。GHCi默认使用NoBuffering (标准输入流),而GHC编译的二进制文件/ runhaskell默认使用LineBuffering。如果你明确地

代码语言:javascript
复制
hSetBuffering stdin NoBuffering

在您的Haskell程序中,您将能够再现GHCi行为。如果你这样做了

代码语言:javascript
复制
hSetBuffering stdin LineBuffering

在GHCi中,您将有许多不必要的副作用,但可以再现runhaskell行为。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21114222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档