Я хотел, чтобы немного узнать об Iteratees, переопределить простой парсер, который я сделал, используя Data.Iteratee и Data.Attoparsec.Iteratee. Хотя я очень сильно тупой. Ниже у меня есть простой пример, который способен анализировать одну строку из файла. Мой синтаксический анализатор читает по одной строке за раз, поэтому мне нужен способ подачи строк до итерации до тех пор, пока это не произойдет. Я прочитал все, что нашел в Google, но многие материалы по iteratee/enumerators довольно продвинуты. Это часть кода, которая имеет значение:
-- There are more imports above.
import Data.Attoparsec.Iteratee
import Data.Iteratee (joinI, run)
import Data.Iteratee.IO (defaultBufSize, enumFile)
line :: Parser ByteString -- left the implementation out (it doesn't check for
new line)
iter = parserToIteratee line
main = do
p <- liftM head getArgs
i <- enumFile defaultBufSize p $ iter
i' <- run i
print i'
Этот пример будет анализировать и печатать одну строку из файла с несколькими строками. Оригинальный script сопоставил парсер над списком ByteStrings. Поэтому я хотел бы сделать то же самое здесь. Я нашел enumLines
в Итерате, но я не могу на всю жизнь понять, как его использовать. Может быть, я неправильно понимаю его цель?