a PEG (parsing expression grammar) style parser would be ideal for this sort of thing. The nice thing about them is that you can make your error correction/detection part of the grammar itself and if you are a little careful when writing your grammar, you end up with a lazy parser, which can be useful for something such as a ast-highlighting editor.
For an example of how error correction can be handled in the parser itself, the basic and only routine to call the PEG based frisby[1] parser is essentially: runPeg :: P a -> String -> a notice that there is no need at all for error handling in the calling routine because you can just write something like runPegMaybe :: P a -> String -> Maybe a runPegMaybe p s = runPeg (fmap Just p </> return Nothing) likewise, you can add things in your expression parser like exp <- exp '+' exp </> '(' exp ')' </> errorExp where errorExp is a rule that 'eats' any expression errors and lets the parser continue on as normal. A long term goal of mine is to completely redo jhc's haskell parser in pappy[2] to better take advantage of PEG parsers. Trying to coerce LALR parsers to do what I want is getting frustrating. see http://pdos.csail.mit.edu/~baford/packrat/thesis/ for more information on packrat parsing and PEGs. I have continued development of pappy from Bryan Ford's original version and my repo is at [2]. [1] http://repetae.net/computer/frisby/ [2] http://repetae.net/repos/pappy/ John -- John Meacham - ⑆repetae.net⑆john⑈ _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell