splitClosureTy,
TyConRepr(..), mkTyConRepr,
- mkToPRepr, mkToArrPRepr, mkFromPRepr, mkFromArrPRepr,
+ mkToArrPRepr, mkFromPRepr, mkFromArrPRepr,
mkPADictType, mkPArrayType, mkPReprType,
parrayCoerce, parrayReprTyCon, parrayReprDataCon, mkVScrut,
mk_tc_app_maybe Nothing [ty] = ty
mk_tc_app_maybe (Just tc) tys = mkTyConApp tc tys
-{-
-mkPRepr :: [[Type]] -> VM Type
-mkPRepr tys
- = do
- embed_tc <- builtin embedTyCon
- sum_tcs <- builtins sumTyCon
- prod_tcs <- builtins prodTyCon
-
- let mk_sum [] = unitTy
- mk_sum [ty] = ty
- mk_sum tys = mkTyConApp (sum_tcs $ length tys) tys
-
- mk_prod [] = unitTy
- mk_prod [ty] = ty
- mk_prod tys = mkTyConApp (prod_tcs $ length tys) tys
-
- mk_embed ty = mkTyConApp embed_tc [ty]
-
- return . mk_sum
- . map (mk_prod . map mk_embed)
- $ tys
--}
-
-mkToPRepr :: TyConRepr -> [[CoreExpr]] -> [CoreExpr]
-mkToPRepr (TyConRepr {
- repr_tys = repr_tys
- , repr_prod_tycons = prod_tycons
- , repr_prod_tys = prod_tys
- , repr_sum_tycon = repr_sum_tycon
- })
- = mk_sum . zipWith3 mk_prod prod_tycons repr_tys
- where
- Just sum_tycon = repr_sum_tycon
-
- mk_sum [] = [Var unitDataConId]
- mk_sum [expr] = [expr]
- mk_sum exprs = zipWith (mk_alt prod_tys) (tyConDataCons sum_tycon) exprs
-
- mk_alt tys dc expr = mk_con_app dc tys [expr]
-
- mk_prod _ _ [] = Var unitDataConId
- mk_prod _ _ [expr] = expr
- mk_prod (Just tc) tys exprs = mk_con_app dc tys exprs
- where
- [dc] = tyConDataCons tc
-
- mk_con_app dc tys exprs = mkConApp dc (map Type tys ++ exprs)
-
mkToArrPRepr :: CoreExpr -> CoreExpr -> [[CoreExpr]] -> VM CoreExpr
mkToArrPRepr len sel ess
= do