diff options
-rw-r--r-- | src/HsParser.ly | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/HsParser.ly b/src/HsParser.ly index fa0059b8..5a254ec1 100644 --- a/src/HsParser.ly +++ b/src/HsParser.ly @@ -1,5 +1,5 @@ ----------------------------------------------------------------------------- -$Id: HsParser.ly,v 1.6 2002/04/29 15:28:54 simonmar Exp $ +$Id: HsParser.ly,v 1.7 2002/05/06 12:32:32 simonmar Exp $ (c) Simon Marlow, Sven Panne 1997-2000 @@ -294,9 +294,9 @@ shift/reduce-conflict, so we don't handle this case here, but in bodyaux. > topdecl :: { HsDecl } > : 'type' simpletype srcloc '=' type > { HsTypeDecl $3 (fst $2) (snd $2) $5 } -> | 'data' ctype srcloc '=' constrs deriving +> | 'data' ctype srcloc constrs deriving > {% checkDataHeader $2 `thenP` \(cs,c,t) -> -> returnP (HsDataDecl $3 cs c t (reverse $5) $6) } +> returnP (HsDataDecl $3 cs c t (reverse $4) $5) } > | 'newtype' ctype srcloc '=' constr deriving > {% checkDataHeader $2 `thenP` \(cs,c,t) -> > returnP (HsNewTypeDecl $3 cs c t $5 $6) } @@ -439,7 +439,11 @@ C a, or (C1 a, C2 b, ... Cn z) and convert it into a context. Blaach! Datatype declarations > constrs :: { [HsConDecl] } -> : constrs '|' constr { $3 : $1 } +> : {- empty; a GHC extension -} { [] } +> | '=' constrs1 { $2 } + +> constrs1 :: { [HsConDecl] } +> : constrs1 '|' constr { $3 : $1 } > | constr { [$1] } > constr :: { HsConDecl } |