我正在使用带有 scala 的 scalaz 6.0。我正在使用 iteratees 从输入流中读取。
这是我拥有的名为 simple.txt 的简单文件。
这
是
一个测试
我的 iteratee 将建立一个 io monad 来打印这些行
def printLines: IterV[String, IO[Unit]] = {
def step(currentIO: IO[Unit])(input: Input[String]): IterV[String, IO[Unit]] =
input match {
case El(x) => Cont(
step(
currentIO.flatMap(_ => putStrLn(x))
)
)
case IterV.Empty() => Cont(step(currentIO))
case EOF() => Done(currentIO, EOF[String])
}
Cont(step(io()))
}
当我使用 enumeratorM
getFileLines(new File(".../simple.txt"))(printLines).flatMap(_.run).unsafePerformIO
我检索到正确的输出。
当我尝试使用
getLines(printLines).flatMap(_.run).unsafePerformIO
我只会将“This”返回到控制台。getLines 使用标准输入流。我已经向 iteratee 添加了调试语句,并且 getLines 似乎在第一行之后发送 EOF() 并且我无法解决它。