2010-01-19 8 views
6

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

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

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

Спасибо!

+2

основе [другой вопрос] [1] вы спросили, вы должны научиться чтобы прочитать документацию библиотеки, которую вы используете. Он доступен в Hackage. [1]: http://stackoverflow.com/questions/2086842/using-haskell-to-output-a-utf-8-encoded-bytestring –

ответ

8

Просто введите Parser тип от Text.Parsec.ByteString или Text.Parsec.ByteString.Lazy, а не от Text.Parsec.String.

+0

Что такое числа в Text.Parsec.ByteString.Lazy (http : //hackage.haskell.org/packages/archive/parsec/3.0.0/doc/html/Text-Parsec-ByteString-Lazy.html)? – HHC

+0

см. (Http://stackoverflow.com/questions/15455084/matching-bytestrings-in-parsec?rq=1)[http://stackoverflow.com/questions/15455084/matching-bytestrings-in-parsec?rq= 1] для того, куда идти отсюда – Karl

2

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

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

Приветствие

Edit: Парсеки, что СТГ предположить (Text.Parsec.ByteString) на самом деле версия 3.0 предыдущая версия 2.x.x расположен в Text.ParserCombinators.Parsec.

+0

О, тогда мне, похоже, в настоящее время не хватает новейшей версии, и мы использовали более старую версию. Я обновлю. Спасибо вам обоим! – 2010-01-19 01:26:04

0
import Text.Parsec.ByteString() 

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

forall m. Stream ByteString m Char 

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

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