парсер для Data.ByteString.Lazy.Char8 в Haskell? - PullRequest
2 голосов
/ 29 сентября 2010

Привет, я столкнулся со следующей проблемой, мне нужно переписать существующий код, чтобы улучшить его производительность.старая версия использовала синтаксический анализатор, определенный следующим образом:

newtype Parser Char a = Parser {runParser :: [Char] -> [(a,[Char])]}

для анализа строк из файлов.но это было слишком медленно и требовало много памяти для вычисления по строкам.Чтобы улучшить этот код, я решил использовать Data.ByteString.Lazy.Char8 вместо String, но я не знаю, как обращаться с парсером, возможно ли определить парсер таким способом?

newtype Parser Char a = parser {runParser :: ByteString -> [(a,ByteString)]} ?

или есть какой-нибудь пакет парсера, посвященный такой работе?

благодаря ответу

1 Ответ

3 голосов
/ 29 сентября 2010

attoparsec и Parsec 3 оба имеют интерфейсы, предназначенные для ленивых ByteStrings.

(И, конечно, можно определить парсер таким образом, но ядумаю, что вы имеете в виду

newtype Parser a = Parser {runParser :: ByteString -> [(a,ByteString)]}

)

...