where
(fn, tys) = collectAnnTypeArgs e
+vectExpr (_, AnnApp (_, AnnVar v) (_, AnnLit lit))
+ | Just con <- isDataConId_maybe v
+ , is_special_con con
+ = do
+ let vexpr = App (Var v) (Lit lit)
+ lexpr <- liftPA vexpr
+ return (vexpr, lexpr)
+ where
+ is_special_con con = con `elem` [intDataCon, floatDataCon, doubleDataCon]
+
+
vectExpr (_, AnnApp fn arg)
= do
arg_ty' <- vectType arg_ty
(vbndr, vbody) <- vectBndrIn bndr (vectExpr body)
return $ vCaseDEFAULT vscrut vbndr vty lty vbody
+vectAlgCase tycon ty_args scrut bndr ty [(DataAlt dc, [], body)]
+ = do
+ vscrut <- vectExpr scrut
+ vty <- vectType ty
+ lty <- mkPArrayType vty
+ (vbndr, vbody) <- vectBndrIn bndr (vectExpr body)
+ return $ vCaseDEFAULT vscrut vbndr vty lty vbody
+
vectAlgCase tycon ty_args scrut bndr ty [(DataAlt dc, bndrs, body)]
= do
vect_tc <- maybeV (lookupTyCon tycon)