X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fprelude%2FTysWiredIn.lhs;h=21e51c464919ed4112819b237cbd756a0e3c2fd7;hp=bc450281991faa8dd930730b9c8baceea1e3fa33;hb=e5c3b478b3cd1707cf122833822f44b2ac09b8e9;hpb=b2524b3960999fffdb3767900f58825903f6560f diff --git a/compiler/prelude/TysWiredIn.lhs b/compiler/prelude/TysWiredIn.lhs index bc45028..21e51c4 100644 --- a/compiler/prelude/TysWiredIn.lhs +++ b/compiler/prelude/TysWiredIn.lhs @@ -50,9 +50,16 @@ module TysWiredIn ( -- * Heterogeneous Metaprogramming mkHetMetCodeTypeTy, hetMetCodeTypeTyConName, - hetMetCodeTypeTyCon, isHetMetCodeTypeTyCon, + hetMetCodeTypeTyCon, + isHetMetCodeTypeTyCon, hetMetCodeTypeTyCon_RDR, + mkHetMetKappaTy, + hetMetKappaTyConName, + hetMetKappaTyCon, + hetMetKappaTyCon_RDR, + isHetMetKappaTyCon, + -- * Parallel arrays mkPArrTy, parrTyCon, parrFakeCon, isPArrTyCon, isPArrFakeCon, @@ -122,6 +129,7 @@ wiredInTyCons = [ unitTyCon -- Not treated like other tuples, because , listTyCon , parrTyCon , hetMetCodeTypeTyCon + , hetMetKappaTyCon ] \end{code} @@ -167,13 +175,17 @@ parrDataConName = mkWiredInDataConName UserSyntax gHC_PARR' (fsLit "PArr") parrDataConKey parrDataCon hetMetCodeTypeTyConName :: Name -hetMetCodeTypeTyConName = mkWiredInTyConName BuiltInSyntax gHC_HETMET_CODETYPES (fsLit "<[]>@") hetMetCodeTypeTyConKey hetMetCodeTypeTyCon +hetMetCodeTypeTyConName = mkWiredInTyConName BuiltInSyntax gHC_HETMET_CODETYPES (fsLit "<{}>@") hetMetCodeTypeTyConKey hetMetCodeTypeTyCon hetMetCodeTypeDataConName :: Name hetMetCodeTypeDataConName = - mkWiredInDataConName BuiltInSyntax gHC_HETMET_CODETYPES (fsLit "<[]>") hetMetCodeTypeDataConKey hetMetCodeTypeDataCon + mkWiredInDataConName BuiltInSyntax gHC_HETMET_CODETYPES (fsLit "<{}>") hetMetCodeTypeDataConKey hetMetCodeTypeDataCon + +hetMetKappaTyConName :: Name +hetMetKappaTyConName = mkWiredInTyConName BuiltInSyntax gHC_HETMET_CODETYPES (fsLit "~~>") hetMetKappaTyConKey hetMetKappaTyCon boolTyCon_RDR, false_RDR, true_RDR, intTyCon_RDR, charTyCon_RDR, - intDataCon_RDR, listTyCon_RDR, consDataCon_RDR, parrTyCon_RDR, hetMetCodeTypeTyCon_RDR :: RdrName + intDataCon_RDR, listTyCon_RDR, consDataCon_RDR, parrTyCon_RDR, hetMetCodeTypeTyCon_RDR, + hetMetKappaTyCon_RDR :: RdrName boolTyCon_RDR = nameRdrName boolTyConName false_RDR = nameRdrName falseDataConName true_RDR = nameRdrName trueDataConName @@ -184,6 +196,7 @@ listTyCon_RDR = nameRdrName listTyConName consDataCon_RDR = nameRdrName consDataConName parrTyCon_RDR = nameRdrName parrTyConName hetMetCodeTypeTyCon_RDR = nameRdrName hetMetCodeTypeTyConName +hetMetKappaTyCon_RDR = nameRdrName hetMetKappaTyConName \end{code} @@ -614,16 +627,25 @@ Heterogeneous Metaprogramming mkHetMetCodeTypeTy :: TyVar -> Type -> Type mkHetMetCodeTypeTy ecn ty = mkTyConApp hetMetCodeTypeTyCon [(mkTyVarTy ecn), ty] +mkHetMetKappaTy :: Type -> Type -> Type +mkHetMetKappaTy a b = mkTyConApp hetMetKappaTyCon [a, b] + ecTyVar = head ecTyVars -- | Represents the type constructor of box types hetMetCodeTypeTyCon :: TyCon hetMetCodeTypeTyCon = pcNonRecDataTyCon hetMetCodeTypeTyConName [ecTyVar, betaTyVar] [hetMetCodeTypeDataCon] +hetMetKappaTyCon :: TyCon +hetMetKappaTyCon = pcNonRecDataTyCon hetMetKappaTyConName [alphaTyVar, betaTyVar] [] + -- | Check whether a type constructor is the constructor for box types isHetMetCodeTypeTyCon :: TyCon -> Bool isHetMetCodeTypeTyCon tc = tyConName tc == hetMetCodeTypeTyConName +isHetMetKappaTyCon :: TyCon -> Bool +isHetMetKappaTyCon tc = tyConName tc == hetMetKappaTyConName + hetMetCodeTypeDataCon :: DataCon hetMetCodeTypeDataCon = pcDataCon hetMetCodeTypeDataConName