2 module Vectorise.Utils.PRDict (
9 import Vectorise.Builtins
10 import Vectorise.Utils.Base
11 import Vectorise.Utils.PADict
21 prDictOfType :: Type -> VM CoreExpr
22 prDictOfType ty = prDictOfTyApp ty_fn ty_args
24 (ty_fn, ty_args) = splitAppTys ty
26 prDictOfTyApp :: Type -> [Type] -> VM CoreExpr
27 prDictOfTyApp ty_fn ty_args
28 | Just ty_fn' <- coreView ty_fn = prDictOfTyApp ty_fn' ty_args
29 prDictOfTyApp (TyConApp tc _) ty_args
31 dfun <- liftM Var $ maybeV (lookupTyConPR tc)
32 prDFunApply dfun ty_args
33 prDictOfTyApp _ _ = noV
35 prDFunApply :: CoreExpr -> [Type] -> VM CoreExpr
38 dicts <- mapM prDictOfType tys
39 return $ mkApps (mkTyApps dfun tys) dicts
41 wrapPR :: Type -> VM CoreExpr
44 pa_dict <- paDictOfType ty
45 pr_dfun <- prDFunOfTyCon =<< builtin wrapTyCon
46 return $ mkApps pr_dfun [Type ty, pa_dict]