On Fri, Dec 25, 2009 at 11:56 AM, Serguey Zefirov <sergueyz@gmail.com> wrote:
A pair of problems:
1) How to write a parser that could be restarted? Like, it will be
represented by a function that returns something along the lines

data ParseStepResult input result =
   Success (Maybe (input -> ParseStepResult input result)) (Maybe result)
 | Failure

This is basically the approach taken by the Iteratees package.
 
2) How to write parser like one above that could be saved into database?

data ParserCont input result = ...
   deriving (Show, Read)
data ParseStepResult input result =
   Success (Maybe (ParserCont input result)) (Maybe result)
 | Failure

Yes, you'll have to defunctionalize the continuation , since you can't serialize an arbitrary function in Haskell.
 
I could imagine that it is possible using parser generator like Happy.

Is it possible to get right using parsing combinators library?

You won't find a built-in monadic parser combinator library that works this way, because of the necessary defunctionalization and the requirement that each action and intermediate result be serializable.

You could probably encode the defunctionalization of a specific parser and build up a combinator set yourself, however.

-Edward Kmett
 
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe