Haskell IO与之交互并映射

| 我正在尝试使用带有
map
interact
函数来生成交互式Haskell程序。 这就是我在ghci中得到的(据我所知,这是所有教程解释ѭ0用法的方式-除了结果外)。
*Module> interact $ unlines . map (++ \"!\") . lines
tteesstt
!
请注意,实际上发生的是,我键入的每个字符都会立即重复,并在按Return键后出现惊叹号。但是,我期望这样:
*Module> interact $ unlines . map (++ \"!\") . lines
test
test!
如果我使用相同的程序结构,但是用
filter
而不是ѭ1perfectly,它会完美地工作。     
已邀请:
        问题是ghci将缓冲模式更改为每个字符。就是说,程序一开始就开始处理代码。如果将此行写入名为“ 7”的文件
main = interact $ unlines . map (++ \"!\") . lines
并使用
runhaskell foo.hs
运行它,您会发现它按预期运行,因为Haskell默认使用行缓冲。     
        如FUZxxl所说,这是一个缓冲问题。 要更改GHCi中的缓冲样式,请使用
hSetBuffering
Prelude> :m +System.IO
Prelude System.IO> hSetBuffering stdout LineBuffering 
Prelude System.IO> interact $ unlines . map (++\"!\") . lines
hello
hello!
^CInterrupted.
Prelude System.IO> 
    

要回复问题请先登录注册