-
-buildPADict :: PAInstance -> VM [(Var, CoreExpr)]
-buildPADict (PAInstance {
- painstInstance = inst
- , painstVectTyCon = vect_tc
- , painstArrTyCon = arr_tc })
- = localV . abstractOverTyVars (tyConTyVars arr_tc) $ \abstract ->
+ res_ty = mkTyConApp vect_tc arg_tys
+
+ orig_worker = dataConWorkId orig_dc
+
+ mk_vect = return . mkConApp vect_dc $ map Type arg_tys
+ mk_lift = do
+ len <- newLocalVar FSLIT("n") intPrimTy
+ arr_tys <- mapM mkPArrayType dc_tys
+ args <- mapM (newLocalVar FSLIT("xs")) arr_tys
+ shapes <- shapeReplicate shape
+ (Var len)
+ (mkDataConTag vect_dc)
+
+ empty_pre <- mapM emptyPA (concat pre)
+ empty_post <- mapM emptyPA (concat post)
+
+ return . mkLams (len : args)
+ . wrapFamInstBody arr_tc arg_tys
+ . mkConApp arr_dc
+ $ map Type arg_tys ++ shapes
+ ++ empty_pre
+ ++ map Var args
+ ++ empty_post
+
+buildPADict :: Shape -> TyCon -> TyCon -> Var -> VM CoreExpr
+buildPADict shape vect_tc arr_tc dfun
+ = polyAbstract tvs $ \abstract ->