splitClosureTy,
TyConRepr(..), mkTyConRepr,
- mkToPRepr, mkToArrPRepr, mkFromPRepr, mkFromArrPRepr,
+ mkToArrPRepr, mkFromPRepr, mkFromArrPRepr,
mkPADictType, mkPArrayType, mkPReprType,
parrayCoerce, parrayReprTyCon, parrayReprDataCon, mkVScrut,
let prod_tys = zipWith mk_tc_app_maybe prod_tycons rep_tys
sum_tycon <- mk_tycon sumTyCon prod_tys
-
return $ TyConRepr {
repr_tyvars = tyvars
, repr_tys = rep_tys
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 :: [[CoreExpr]] -> VM ([CoreExpr], Type)
-mkToPRepr ess
- = do
- sum_tcs <- builtins sumTyCon
- prod_tcs <- builtins prodTyCon
-
- let mk_sum [] = ([Var unitDataConId], unitTy)
- mk_sum [(expr, ty)] = ([expr], ty)
- mk_sum es = (zipWith mk_alt (tyConDataCons sum_tc) exprs,
- mkTyConApp sum_tc tys)
- where
- (exprs, tys) = unzip es
- sum_tc = sum_tcs (length es)
- mk_alt dc expr = mkConApp dc (map Type tys ++ [expr])
-
- mk_prod [] = (Var unitDataConId, unitTy)
- mk_prod [expr] = (expr, exprType expr)
- mk_prod exprs = (mkConApp prod_dc (map Type tys ++ exprs),
- mkTyConApp prod_tc tys)
- where
- tys = map exprType exprs
- prod_tc = prod_tcs (length exprs)
- [prod_dc] = tyConDataCons prod_tc
-
- return . mk_sum . map mk_prod $ ess
-
mkToArrPRepr :: CoreExpr -> CoreExpr -> [[CoreExpr]] -> VM CoreExpr
mkToArrPRepr len sel ess
= do