, applyClosurePVar :: Var
, lengthPAVar :: Var
, replicatePAVar :: Var
+ , emptyPAVar :: Var
}
paDictTyCon :: Builtins -> TyCon
applyClosurePVar <- dsLookupGlobalId applyClosurePName
lengthPAVar <- dsLookupGlobalId lengthPAName
replicatePAVar <- dsLookupGlobalId replicatePAName
+ emptyPAVar <- dsLookupGlobalId emptyPAName
return $ Builtins {
parrayTyCon = parrayTyCon
, applyClosurePVar = applyClosurePVar
, lengthPAVar = lengthPAVar
, replicatePAVar = replicatePAVar
+ , emptyPAVar = emptyPAVar
}
data GlobalEnv = GlobalEnv {
splitClosureTy,
mkPADictType, mkPArrayType,
paDictArgType, paDictOfType,
- paMethod, lengthPA, replicatePA,
+ paMethod, lengthPA, replicatePA, emptyPA,
lookupPArrayFamInst,
hoistExpr, takeHoisted
) where
replicatePA len x = liftM (`mkApps` [len,x])
(paMethod replicatePAVar (exprType x))
+emptyPA :: Type -> VM CoreExpr
+emptyPA = paMethod emptyPAVar
+
lookupPArrayFamInst :: Type -> VM (TyCon, [Type])
lookupPArrayFamInst ty = builtin parrayTyCon >>= (`lookupFamInst` [ty])