On Fri, Dec 25, 2009 at 11:56 AM, Serguey Zefirov <sergu...@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
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to