2010-01-19 17 views
6

He logrado usar Parsec para analizar un String, pero no puedo hacer lo mismo con ByteString.Usando Parsec de Haskell para analizar un ByteString

¿Cómo puedo hacer que Parsec funcione con ByteStrings sin convertirlo manualmente a Strings?

Tengo la sensación de que esto no es difícil de lograr. ¿Me equivoco? (Soy nuevo en Haskell. ^^)

Gracias!

+2

Sobre la base de [la otra pregunta] [1] que pidió, usted debe aprender para leer la documentación de la biblioteca que estás usando. Está disponible en Hackage. [1]: http://stackoverflow.com/questions/2086842/using-haskell-to-output-a-utf-8-encoded-bytestring –

Respuesta

8

Solo importe el tipo Parser de Text.Parsec.ByteString o Text.Parsec.ByteString.Lazy, en lugar de Text.Parsec.String.

+0

¿Qué son los números en Text.Parsec.ByteString.Lazy (http : //hackage.haskell.org/packages/archive/parsec/3.0.0/doc/html/Text-Parsec-ByteString-Lazy.html)? – HHC

+0

ver (http://stackoverflow.com/questions/15455084/matching-bytestrings-in-parsec?rq=1)[http://stackoverflow.com/questions/15455084/matching-bytestrings-in-parsec?rq= 1] a dónde ir desde aquí – Karl

2

la respuesta en realidad depende de la versión de Parsec que esté utilizando. Si está utilizando la versión 3.0 o posterior, entonces sí. Para la versión 2.x.x no creo que puedas.

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

Saludos

de edición: El Parsec que sugieren STH (Text.Parsec.ByteString) es en realidad la versión 3.0 a la versión anterior 2.x.x se encuentra en Text.ParserCombinators.Parsec.

+0

Oh, entonces parece que actualmente carezco de la versión más nueva y he estado usando la versión anterior. Voy a actualizar. ¡Gracias a los dos! –

0
import Text.Parsec.ByteString() 

le dará la instancia

forall m. Stream ByteString m Char 

por lo tanto, si se utiliza, en lugar de Parser a:

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