Attoparsec Iteratee

Я хотел, просто чтобы немного узнать об Iteratees, переопределить простой синтаксический анализатор, который я сделал, используя Data.Iteratee и Data.Attoparsec.Iteratee. Хотя я в значительной степени озадачен. Ниже у меня есть простой пример, который может анализировать одну строку из файла. Мой синтаксический анализатор читает по одной строке за раз, поэтому мне нужен способ подачи строк на итерацию, пока это не будет сделано. Я прочитал все, что нашел в Google, но большая часть материала по итераторам / перечислителям довольно продвинута. Это часть кода, которая имеет значение:

-- 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'

В этом примере выполняется синтаксический анализ и печать одной строки из файла с несколькими строками. Исходный сценарий сопоставил синтаксический анализатор со списком ByteStrings. Так что я хотел бы сделать здесь то же самое. Я нашел enumLines в Iteratee, но я не могу понять, как его использовать. Может быть, я неправильно понимаю его цель?

10
задан Johanna Larsson 15 June 2011 в 17:00
поделиться