some bugs in Language.Haskell.Parser

Hal Daume III hdaume@ISI.EDU
Sun, 13 Jul 2003 10:34:17 -0700 (PDT)


> Message: 2
> Date: Sun, 13 Jul 2003 12:52:40 +0100
> To: libraries@haskell.org
> Subject: Re: some bugs in Language.Haskell.Parser
> From: Ross Paterson <ross@soi.city.ac.uk>
> 
> > this gives a parse error because it's waiting for a real declaration
> > inside of the first where clause.
> 
> Thanks for the report.  All these are due to the implementation of layout
> omitting the rule about inserting empty braces (now fixed in CVS).

No problem :).

> > it also can't deal with empty statements:
> > 
> > > v = do {return 'a';;}
> > 
> > should be accepted but results in a parser error.
> 
> This isn't Haskell.

I think you're right :).  GHC accepts it, Hugs does not:

10:21am moussor:~/ cat > Foo.hs
main = do {putStrLn "Hi";;}
10:21am moussor:~/ ghc Foo.hs
10:21am moussor:~/ ./a.out
Hi
10:21am moussor:~/ hugs Foo.hs
__   __ __  __  ____   ___      _________________________________________
||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__||  __||     Copyright (c) 1994-2001
||---||         ___||           World Wide Web: http://haskell.org/hugs
||   ||                         Report bugs to: hugs-bugs@haskell.org
||   || Version: December 2001  _________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Reading file "/nfs/moussor/hdaume/share/hugs/lib/Prelude.hs":
Reading file "Foo.hs":
Parsing
ERROR "Foo.hs":1 - Syntax error in definition (unexpected `;', possibly due to b
ad layout)


I think GHC is in error here.  According to the report:

3.14  Do Expressions
exp 	-> 	do { stmts } 	(do expression)
stmts 	-> 	stmt1 ... stmtn exp [;] 	(n>=0)
stmt 	-> 	exp ;
	| 	pat <- exp ;
	| 	let decls ;
	| 	; 	(empty statement)


There's clearly no final exp in the stmts.

That's what I get for trusting GHC too much :)

 - Hal