Использование Haskell Parsec для разбора ByteString

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

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

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

Спасибо!


person Community    schedule 19.01.2010    source источник
comment
Основываясь на [другом вопросе] [1], который вы задали, вам следует научиться читать документацию библиотеки, которую вы используете. Он доступен на Hackage. [1]: stackoverflow.com/questions/2086842/   -  person Wei Hu    schedule 19.01.2010


Ответы (3)


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

person sth    schedule 19.01.2010
comment
Что такое числа в Text.Parsec.ByteString.Lazy(hackage.haskell.org/packages/archive/parsec/3.0.0/doc/html/)? - person HHC; 02.04.2013
comment
см. (stackoverflow.com/questions/15455084/, куда идти дальше - person Karl; 27.09.2016

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

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

Ваше здоровье

редактировать: Parsec, который предлагает STH (Text.Parsec.ByteString), на самом деле является версией 3.0, предыдущая версия 2.x.x находится в Text.ParserCombinators.Parsec.

person JFT    schedule 19.01.2010
comment
О, тогда мне кажется, что в настоящее время не хватает самой новой версии, и я использую более старую. Я обновлю. Спасибо вам обоим! - person ; 19.01.2010

import Text.Parsec.ByteString ()

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

forall m. Stream ByteString m Char

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

p ::  Stream s m Char => ParsecT s u m a
person alternative    schedule 25.06.2011
comment
Вы случайно не пытались объяснить, как получить Word8 вместо Char. Я не могу понять это. - person dbanas; 03.10.2019