{-
-----------------------------------------------------------------------------
-$Id: Parser.y,v 1.39 2000/10/05 22:50:18 andy Exp $
+$Id: Parser.y,v 1.41 2000/10/12 11:47:26 sewardj Exp $
Haskell grammar.
constr_stuff :: { (RdrName, RdrNameConDetails) }
: btype {% mkVanillaCon $1 [] }
| btype '!' atype satypes {% mkVanillaCon $1 (Banged $3 : $4) }
- | gtycon '{' fielddecls '}' {% mkRecCon $1 (reverse $3) }
+ | gtycon '{' fielddecls '}' {% mkRecCon $1 $3 }
| sbtype conop sbtype { ($2, InfixCon $1 $3) }
satypes :: { [RdrNameBangType] }
: atype satypes { Unbanged $1 : $2 }
| '!' atype satypes { Banged $2 : $3 }
+ | {- empty -} { [] }
sbtype :: { RdrNameBangType }
: btype { Unbanged $1 }
| '!' atype { Banged $2 }
fielddecls :: { [([RdrName],RdrNameBangType)] }
- : fielddecls ',' fielddecl { $3 : $1 }
+ : fielddecl ',' fielddecls { $1 : $3 }
| fielddecl { [$1] }
fielddecl :: { ([RdrName],RdrNameBangType) }
-- *after* we see the close paren.
ipvar :: { RdrName }
- : IPVARID { (mkSrcUnqual ipName (tailFS $1)) }
+ : IPVARID { (mkUnqual ipName (tailFS $1)) }
qcon :: { RdrName }
: qconid { $1 }
qvarid :: { RdrName }
: varid { $1 }
- | QVARID { mkSrcQual varName $1 }
+ | QVARID { mkQual varName $1 }
varid :: { RdrName }
: varid_no_unsafe { $1 }
- | 'unsafe' { mkSrcUnqual varName SLIT("unsafe") }
+ | 'unsafe' { mkUnqual varName SLIT("unsafe") }
varid_no_unsafe :: { RdrName }
- : VARID { mkSrcUnqual varName $1 }
- | special_id { mkSrcUnqual varName $1 }
- | 'forall' { mkSrcUnqual varName SLIT("forall") }
+ : VARID { mkUnqual varName $1 }
+ | special_id { mkUnqual varName $1 }
+ | 'forall' { mkUnqual varName SLIT("forall") }
tyvar :: { RdrName }
- : VARID { mkSrcUnqual tvName $1 }
- | special_id { mkSrcUnqual tvName $1 }
- | 'unsafe' { mkSrcUnqual tvName SLIT("unsafe") }
+ : VARID { mkUnqual tvName $1 }
+ | special_id { mkUnqual tvName $1 }
+ | 'unsafe' { mkUnqual tvName SLIT("unsafe") }
-- These special_ids are treated as keywords in various places,
-- but as ordinary ids elsewhere. A special_id collects all thsee
qconid :: { RdrName }
: conid { $1 }
- | QCONID { mkSrcQual dataName $1 }
+ | QCONID { mkQual dataName $1 }
conid :: { RdrName }
- : CONID { mkSrcUnqual dataName $1 }
+ : CONID { mkUnqual dataName $1 }
-----------------------------------------------------------------------------
-- ConSyms
qconsym :: { RdrName }
: consym { $1 }
- | QCONSYM { mkSrcQual dataName $1 }
+ | QCONSYM { mkQual dataName $1 }
consym :: { RdrName }
- : CONSYM { mkSrcUnqual dataName $1 }
+ : CONSYM { mkUnqual dataName $1 }
-----------------------------------------------------------------------------
-- VarSyms
| qvarsym1 { $1 }
qvarsym1 :: { RdrName }
-qvarsym1 : QVARSYM { mkSrcQual varName $1 }
+qvarsym1 : QVARSYM { mkQual varName $1 }
varsym :: { RdrName }
: varsym_no_minus { $1 }
- | '-' { mkSrcUnqual varName SLIT("-") }
+ | '-' { mkUnqual varName SLIT("-") }
varsym_no_minus :: { RdrName } -- varsym not including '-'
- : VARSYM { mkSrcUnqual varName $1 }
- | special_sym { mkSrcUnqual varName $1 }
+ : VARSYM { mkUnqual varName $1 }
+ | special_sym { mkUnqual varName $1 }
-- See comments with special_id
: CONID { mkSrcModuleFS $1 }
tycon :: { RdrName }
- : CONID { mkSrcUnqual tcClsName $1 }
+ : CONID { mkUnqual tcClsName $1 }
tyconop :: { RdrName }
- : CONSYM { mkSrcUnqual tcClsName $1 }
+ : CONSYM { mkUnqual tcClsName $1 }
qtycon :: { RdrName }
: tycon { $1 }
- | QCONID { mkSrcQual tcClsName $1 }
+ | QCONID { mkQual tcClsName $1 }
qtyconop :: { RdrName }
: tyconop { $1 }
- | QCONSYM { mkSrcQual tcClsName $1 }
+ | QCONSYM { mkQual tcClsName $1 }
qtycls :: { RdrName }
: qtycon { $1 }