2010-09-29 6 views
2

Salut Je suis confronté au problème suivant, je dois réécrire un code existant pour améliorer ses performances. l'ancienne version utilisait un analyseur défini comme ceci:parser pour Data.ByteString.Lazy.Char8 dans Haskell?

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

pour analyser les lignes à partir de fichiers. mais il était trop lent et nécessitait beaucoup de mémoire pour réaliser le calcul sur les lignes. Pour améliorer ce code, j'ai décidé d'utiliser Data.ByteString.Lazy.Char8 au lieu de String, mais je ne sais pas comment traiter l'analyseur, est-il possible de définir un analyseur de cette façon?

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

ou existe-t-il un package d'analyseur dédié à ce type de travail?

grâce à répondre

Répondre

3

attoparsec et Parsec 3 ont toutes deux interfaces ciblant les chaînes d'octets paresseux.

(Et bien sûr, il est possible de définir un analyseur de cette façon, mais je pense que vous voulez dire

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

)