Я использую scalaz 6.0 с scala. Я использую iteratees для чтения из входного потока.Iteratee input from Standard IO
Вот простой файл с именем simple.txt, который у меня есть.
Это
Является
тест
Мой iteratee будет наращивать Io монаду, чтобы напечатать строки
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
я только получаю «Это» обратно в консоль. getLines использует стандартный поток ввода. Я добавил операторы отладки в iteratee, и getLines, кажется, отправляет EOF() после первой строки, и я не смог ее разрешить.