Commit 4e105ef5 authored by rl@cse.unsw.edu.au's avatar rl@cse.unsw.edu.au

Use the right dictionary when calling lengthPA

parent 63f16bfb
......@@ -43,7 +43,7 @@ isAnnTypeArg (_, AnnType t) = True
isAnnTypeArg _ = False
isClosureTyCon :: TyCon -> Bool
isClosureTyCon tc = tyConUnique tc == closureTyConKey
isClosureTyCon tc = tyConName tc == closureTyConName
splitClosureTy :: Type -> (Type, Type)
splitClosureTy ty
......@@ -53,6 +53,17 @@ splitClosureTy ty
| otherwise = pprPanic "splitClosureTy" (ppr ty)
isPArrayTyCon :: TyCon -> Bool
isPArrayTyCon tc = tyConName tc == parrayTyConName
splitPArrayTy :: Type -> Type
splitPArrayTy ty
| Just (tc, [arg_ty]) <- splitTyConApp_maybe ty
, isPArrayTyCon tc
= arg_ty
| otherwise = pprPanic "splitPArrayTy" (ppr ty)
mkPADictType :: Type -> VM Type
mkPADictType ty
= do
......@@ -118,7 +129,9 @@ paMethod method ty
return $ mkApps (Var fn) [Type ty, dict]
lengthPA :: CoreExpr -> VM CoreExpr
lengthPA x = liftM (`App` x) (paMethod lengthPAVar (exprType x))
lengthPA x = liftM (`App` x) (paMethod lengthPAVar ty)
where
ty = splitPArrayTy (exprType x)
replicatePA :: CoreExpr -> CoreExpr -> VM CoreExpr
replicatePA len x = liftM (`mkApps` [len,x])
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment