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> 
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...