module Vectorise.Utils.PADict (
- mkPADictType,
paDictArgType,
paDictOfType,
- paDFunType,
paMethod
)
where
import Control.Monad
-mkPADictType :: Type -> VM Type
-mkPADictType ty = mkBuiltinTyConApp paTyCon [ty]
-
-
paDictArgType :: TyVar -> VM (Maybe Type)
paDictArgType tv = go (TyVarTy tv) (tyVarKind tv)
where
go ty k
| isLiftedTypeKind k
- = liftM Just (mkPADictType ty)
+ = liftM Just (mkBuiltinTyConApp paTyCon [ty])
go _ _ = return Nothing
failure = cantVectorise "Can't construct PA dictionary for type" (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
-
paMethod :: (Builtins -> Var) -> String -> Type -> VM CoreExpr
paMethod _ name ty
| Just tycon <- splitPrimTyCon ty