
On Sun, Jul 20, 2008 at 02:34:09AM +0400, Bulat Ziganshin wrote:
i think that Parsec library should hold entire file in memory only when you use 'try' for whole file. otherwise it should omit data as proceeded
I do not believe that is the case, since the return type of runParser "Either ParseError a" means that before you can extract the result of the parse from the 'Right' branch, it must evaluate whether the result is 'Left' or 'Right' meaning it needs to parse the whole input in order to determine whether the parse was succesful. This was the reason I made frisby's main parsing routine just be (roughly)
runPeg :: P a -> String -> a
so you have to do something explicit like
runPegMaybe :: P a -> String -> Maybe a runPegMaybe p s = runPeg (fmap Just p // return Nothing) s
to force strictness in the parsing. Though, perhaps parsec is doing something more clever. I do know it uses the one token lookahead trick to determine which branch to take on alternation, but I don't think that solves the issue with parsing the entire file.. John -- John Meacham - ⑆repetae.net⑆john⑈