{-
-----------------------------------------------------------------------------
-$Id: Parser.y,v 1.40 2000/10/06 09:31:45 simonpj Exp $
+$Id: Parser.y,v 1.43 2000/10/24 08:40:10 simonpj Exp $
Haskell grammar.
| srcloc 'data' ctype '=' constrs deriving
{% checkDataHeader $3 `thenP` \(cs,c,ts) ->
returnP (RdrHsDecl (TyClD
- (mkTyData DataType cs c ts (reverse $5) (length $5) $6
- NoDataPragmas $1))) }
+ (mkTyData DataType cs c ts (reverse $5) (length $5) $6 $1))) }
| srcloc 'newtype' ctype '=' newconstr deriving
{% checkDataHeader $3 `thenP` \(cs,c,ts) ->
returnP (RdrHsDecl (TyClD
- (mkTyData NewType cs c ts [$5] 1 $6
- NoDataPragmas $1))) }
+ (mkTyData NewType cs c ts [$5] 1 $6 $1))) }
| srcloc 'class' ctype fds where
{% checkDataHeader $3 `thenP` \(cs,c,ts) ->
(binds,sigs) = cvMonoBindsAndSigs cvClassOpSig (groupBindings $5)
in
returnP (RdrHsDecl (TyClD
- (mkClassDecl cs c ts $4 sigs binds
- NoClassPragmas $1))) }
+ (mkClassDecl cs c ts $4 sigs binds $1))) }
| srcloc 'instance' inst_type where
{ let (binds,sigs)
-- SUP: TEMPORARY HACK, not checking for `module Foo'
deprecation :: { RdrBinding }
- : srcloc exportlist STRING
+ : srcloc depreclist STRING
{ foldr RdrAndBindings RdrNullBind
[ RdrHsDecl (DeprecD (Deprecation n $3 $1)) | n <- $2 ] }
-----------------------------------------------------------------------------
-- Variables, Constructors and Operators.
+depreclist :: { [RdrName] }
+depreclist : deprec_var { [$1] }
+ | deprec_var ',' depreclist { $1 : $2 }
+
+deprec_var :: { RdrName }
+deprec_var : var { $1 }
+ | tycon { $1 }
+
gtycon :: { RdrName }
: qtycon { $1 }
| '(' qtyconop ')' { $2 }
-- *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 }