[Haskell-cafe] mistake in Gentle Introduction

Arthur Baars arthurb at cs.uu.nl
Thu Sep 22 07:28:48 EDT 2005


On 22-sep-05, at 11:20, Tomasz Zielonka wrote:

> On 9/22/05, Simon Marlow <simonmar at microsoft.com> wrote:
>>
>> > The error message on this is really poor: parse error on input
>> > `length'
>> >
>> > An addition like "expecting '('" might be more helpful.
>>
>> Not easy to do - some significant work on Happy would be required (or
>> rewriting GHC's parser, which is even more unlikely).
>>
>> However we *would* like to do some simple error recovery in the parser
>> at some point.  The main reason for doing this is to get better 
>> results
>> from checking partially complete modules in Visual Haskell or hIDE.
>  How about using the parser made by Arthur Baars, trading speed for 
> better error messages?
>  Maybe even the speed issue could be solved.

Speed, error messages and recovery were not my main concern when 
writing the parser. I think a lot can be gained by optimizing the 
combinator-based parsers. However this is no fun. I had to do some 
left-factorization to gain reasonable efficiency(at first the speed was 
sometimes worse than 1 token per minute :-)). For a complex language 
such as Haskell, the code resulting from factorization is really messy 
and the notational elegance of the combinators is lost. Maybe someone 
can write a parser-generator that uses Doaitses parsing-engine as a 
back-end :-)

A main feature of Doaitses parsing-combinators is that they can recover 
from an error in the input. This is done by considering a number of 
alternatives to "repair" the input, and taking the "best" one to 
continue parsing. This proces can be improved by tweaking the insert 
and delete costs of certain symbols. Furthermore the error messages can 
be customized as with Parsec.




More information about the Glasgow-haskell-bugs mailing list