-paArgType :: Type -> Kind -> VM (Maybe Type)
-paArgType ty k
- | Just k' <- kindView k = paArgType ty k'
-
--- Here, we assume that for a kind (k1 -> k2) to be valid, k1 and k2 can only
--- be made up of * and (->), i.e., they can't be coercion kinds or #.
-paArgType ty (FunTy k1 k2)
- = do
- tv <- newTyVar FSLIT("a") k1
- ty1 <- paArgType' (TyVarTy tv) k1
- ty2 <- paArgType' (AppTy ty (TyVarTy tv)) k2
- return . Just $ ForAllTy tv (FunTy ty1 ty2)
-
-paArgType ty k
- | isLiftedTypeKind k
- = do
- tc <- builtin paDictTyCon
- return . Just $ TyConApp tc [ty]
-
- | otherwise
- = return Nothing
-
-paArgType' :: Type -> Kind -> VM Type
-paArgType' ty k
- = do
- r <- paArgType ty k
- case r of
- Just ty' -> return ty'
- Nothing -> pprPanic "paArgType'" (ppr ty)
-