-buildPArrayDataCon :: Name -> TyCon -> TyCon -> VM DataCon
-buildPArrayDataCon orig_name vect_tc repr_tc
- = do
- dc_name <- cloneName mkPArrayDataConOcc orig_name
- shape <- tyConShape vect_tc
- repr_tys <- mapM mkPArrayType types
- wrk_name <- cloneName mkDataConWorkerOcc dc_name
- wrp_name <- cloneName mkDataConWrapperOcc dc_name
-
- let ids = mkDataConIds wrp_name wrk_name data_con
- data_con = mkDataCon dc_name
- False
- (shapeStrictness shape ++ map (const NotMarkedStrict) repr_tys)
- []
- (tyConTyVars vect_tc)
- []
- []
- []
- (shapeReprTys shape ++ repr_tys)
- repr_tc
- []
- ids
-
- return data_con
- where
- types = [ty | dc <- tyConDataCons vect_tc
- , ty <- dataConRepArgTys 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)