import RdrName
import OccName
import Kind( Kind(..) )
-import Name( nameOccName, nameModuleName )
+import Name( nameOccName, nameModule )
import Module
import ParserCoreUtils
import LexCore
%%
module :: { HsExtCore RdrName }
- : '%module' modid tdefs vdefgs
- { HsExtCore (mkHomeModule $2) $3 $4 }
+ : '%module' modid tdefs vdefgs { HsExtCore $2 $3 $4 }
-modid :: { ModuleName }
- : CNAME { mkSysModuleNameFS (mkFastString $1) }
+modid :: { Module }
+ : CNAME { mkModuleFS (mkFastString $1) }
-------------------------------------------------------------
-- Type and newtype declarations are in HsSyn syntax
tdef :: { TyClDecl RdrName }
: '%data' q_tc_name tv_bndrs '=' '{' cons1 '}'
- { mkTyData DataType (noLoc [], noLoc (ifaceExtRdrName $2), map toHsTvBndr $3) $6 Nothing }
+ { mkTyData DataType (noLoc [], noLoc (ifaceExtRdrName $2), map toHsTvBndr $3) Nothing $6 Nothing }
| '%newtype' q_tc_name tv_bndrs trep
{ let tc_rdr = ifaceExtRdrName $2 in
- mkTyData NewType (noLoc [], noLoc tc_rdr, map toHsTvBndr $3) ($4 (rdrNameOcc tc_rdr)) Nothing }
+ mkTyData NewType (noLoc [], noLoc tc_rdr, map toHsTvBndr $3) Nothing ($4 (rdrNameOcc tc_rdr)) Nothing }
-- For a newtype we have to invent a fake data constructor name
-- It doesn't matter what it is, because it won't be used
: {- empty -} { (\ tc_occ -> []) }
| '=' ty { (\ tc_occ -> let { dc_name = mkRdrUnqual (setOccNameSpace dataName tc_occ) ;
con_info = PrefixCon [toHsType $2] }
- in [noLoc $ ConDecl (noLoc dc_name) []
- (noLoc []) con_info]) }
+ in [noLoc $ ConDecl (noLoc dc_name) Explicit []
+ (noLoc []) con_info ResTyH98]) }
cons1 :: { [LConDecl RdrName] }
: con { [$1] }
con :: { LConDecl RdrName }
: d_pat_occ attv_bndrs hs_atys
- { noLoc $ ConDecl (noLoc (mkRdrUnqual $1)) $2 (noLoc []) (PrefixCon $3)}
+ { noLoc $ ConDecl (noLoc (mkRdrUnqual $1)) Explicit $2 (noLoc []) (PrefixCon $3) ResTyH98}
| d_pat_occ '::' ty
- { noLoc $ GadtDecl (noLoc (mkRdrUnqual $1)) (toHsType $3) }
+ -- XXX - autrijus - $3 needs to be split into argument and return types!
+ -- also not sure whether the [] below (quantified vars) appears.
+ -- also the "PrefixCon []" is wrong.
+ -- also we want to munge $3 somehow.
+ -- extractWhatEver to unpack ty into the parts to ConDecl
+ -- XXX - define it somewhere in RdrHsSyn
+ { noLoc $ ConDecl (noLoc (mkRdrUnqual $1)) Explicit [] (noLoc []) (PrefixCon []) (undefined $3) }
attv_bndrs :: { [LHsTyVarBndr RdrName] }
: {- empty -} { [] }
bty :: { IfaceType }
: tv_occ atys { foldl IfaceAppTy (IfaceTyVar $1) $2 }
| q_tc_name atys { IfaceTyConApp (IfaceTc $1) $2 }
+ | '(' ty ')' { $2 }
ty :: { IfaceType }
: bty { $1 }
| '(' STRING '::' aty ')' { MachStr (mkFastString $2) }
tv_occ :: { OccName }
- : NAME { mkSysOcc tvName $1 }
+ : NAME { mkOccName tvName $1 }
var_occ :: { OccName }
- : NAME { mkSysOcc varName $1 }
+ : NAME { mkVarOcc $1 }
-- Type constructor
q_tc_name :: { IfaceExtName }
- : modid '.' CNAME { ExtPkg $1 (mkSysOcc tcName $3) }
+ : modid '.' CNAME { ExtPkg $1 (mkOccName tcName $3) }
-- Data constructor in a pattern or data type declaration; use the dataName,
-- because that's what we expect in Core case patterns
d_pat_occ :: { OccName }
- : CNAME { mkSysOcc dataName $1 }
+ : CNAME { mkOccName dataName $1 }
-- Data constructor occurrence in an expression;
-- use the varName because that's the worker Id
d_occ :: { OccName }
- : CNAME { mkSysOcc varName $1 }
+ : CNAME { mkVarOcc $1 }
{
eqTc :: IfaceTyCon -> TyCon -> Bool -- Ugh!
eqTc (IfaceTc (ExtPkg mod occ)) tycon
- = mod == nameModuleName nm && occ == nameOccName nm
+ = mod == nameModule nm && occ == nameOccName nm
where
nm = tyConName tycon