X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectUtils.hs;h=df8c23ff5e26651de62f8e8cbc8d221f21813440;hb=346516b3930d677616e5108499d3a82b51f58853;hp=b3c110e9805a8e38033c79c4c3218e710d01fdff;hpb=cdb1c5e717ec91f5ba7db30cabbb9dd195dd637a;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectUtils.hs b/compiler/vectorise/VectUtils.hs index b3c110e..df8c23f 100644 --- a/compiler/vectorise/VectUtils.hs +++ b/compiler/vectorise/VectUtils.hs @@ -3,7 +3,7 @@ module VectUtils ( collectAnnValBinders, splitClosureTy, mkPADictType, mkPArrayType, - paDictArgType, paDictOfType, + paDictArgType, paDictOfType, paDFunType, paMethod, lengthPA, replicatePA, emptyPA, liftPA, polyAbstract, polyApply, polyVApply, lookupPArrayFamInst, @@ -97,7 +97,7 @@ mkClosureTypes arg_tys res_ty mkPADictType :: Type -> VM Type mkPADictType ty = do - tc <- builtin paDictTyCon + tc <- builtin paTyCon return $ TyConApp tc [ty] mkPArrayType :: Type -> VM Type @@ -140,11 +140,21 @@ paDictOfTyApp (TyVarTy tv) ty_args paDFunApply dfun ty_args paDictOfTyApp (TyConApp tc _) ty_args = do - pa_class <- builtin paClass - (dfun, ty_args') <- lookupInst pa_class [TyConApp tc ty_args] - paDFunApply (Var dfun) ty_args' + dfun <- traceMaybeV "paDictOfTyApp" (ppr tc) (lookupTyConPA tc) + paDFunApply (Var dfun) ty_args paDictOfTyApp ty ty_args = pprPanic "paDictOfTyApp" (ppr ty) +paDFunType :: TyCon -> VM Type +paDFunType tc + = do + margs <- mapM paDictArgType tvs + res <- mkPADictType (mkTyConApp tc arg_tys) + return . mkForAllTys tvs + $ mkFunTys [arg | Just arg <- margs] res + where + tvs = tyConTyVars tc + arg_tys = mkTyVarTys tvs + paDFunApply :: CoreExpr -> [Type] -> VM CoreExpr paDFunApply dfun tys = do