
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 (ie, parsers using stream combinators like Fudgets have that property) ie, either a continuation of parsing process and result or failure flag. 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 I could imagine that it is possible using parser generator like Happy. Is it possible to get right using parsing combinators library?