Использование Parsec Haskell для разбора ByteString - PullRequest
6 голосов
/ 19 января 2010

Мне удалось использовать Parsec для анализа строки, но я не могу сделать то же самое с ByteString.

Как заставить Parsec работать с ByteStrings без их ручного преобразования в строки?

У меня такое ощущение, что это не сложно сделать. Я ошибся? (Я новичок в Хаскеле. ^^)

Спасибо!

Ответы [ 3 ]

8 голосов
/ 19 января 2010

Просто импортируйте тип Parser из Text.Parsec.ByteString или Text.Parsec.ByteString.Lazy вместо Text.Parsec.String.

2 голосов
/ 19 января 2010

ответ на самом деле зависит от версии Parsec, которую вы используете.Если вы используете версию 3.0 или выше, тогда да.Для версии 2.xx я не думаю, что вы можете.

http://hackage.haskell.org/packages/archive/parsec/3.0.1/doc/html/Text-Parsec-ByteString.html

Cheers

edit: Parsec, который STH предлагает (Text.Parsec.ByteString),фактически версия 3.0, предыдущая версия 2.xx расположена в Text.ParserCombinators.Parsec.

0 голосов
/ 26 июня 2011
import Text.Parsec.ByteString ()

даст вам экземпляр

forall m. Stream ByteString m Char

следовательно, если вы используете, вместо Parser a:

p ::  Stream s m Char => ParsecT s u m a
...