vectorised, lifted,
mapVect,
+ vVarType,
+
vNonRec, vRec,
vVar, vType, vNote, vLet,
- mkVLams, mkVVarApps
+ vLams, vLamsWithoutLC, vVarApps,
+ vCaseDEFAULT
) where
#include "HsVersions.h"
zipWithVect :: (a -> b -> c) -> Vect a -> Vect b -> Vect c
zipWithVect f (x1,y1) (x2,y2) = (f x1 x2, f y1 y2)
+vVarType :: VVar -> Type
+vVarType = varType . vectorised
+
vVar :: VVar -> VExpr
vVar = mapVect Var
vLet :: VBind -> VExpr -> VExpr
vLet = zipWithVect Let
-mkVLams :: [VVar] -> VExpr -> VExpr
-mkVLams vvs (ve,le) = (mkLams vs ve, mkLams ls le)
+vLams :: Var -> [VVar] -> VExpr -> VExpr
+vLams lc vs (ve, le) = (mkLams vvs ve, mkLams (lc:lvs) le)
+ where
+ (vvs,lvs) = unzip vs
+
+vLamsWithoutLC :: [VVar] -> VExpr -> VExpr
+vLamsWithoutLC vvs (ve,le) = (mkLams vs ve, mkLams ls le)
where
(vs,ls) = unzip vvs
-mkVVarApps :: Var -> VExpr -> [VVar] -> VExpr
-mkVVarApps lc (ve, le) vvs = (ve `mkVarApps` vs, le `mkVarApps` (lc : ls))
+vVarApps :: Var -> VExpr -> [VVar] -> VExpr
+vVarApps lc (ve, le) vvs = (ve `mkVarApps` vs, le `mkVarApps` (lc : ls))
where
(vs,ls) = unzip vvs
+vCaseDEFAULT :: VExpr -> VVar -> Type -> Type -> VExpr -> VExpr
+vCaseDEFAULT (vscrut, lscrut) (vbndr, lbndr) vty lty (vbody, lbody)
+ = (Case vscrut vbndr vty (mkDEFAULT vbody),
+ Case lscrut lbndr lty (mkDEFAULT lbody))
+ where
+ mkDEFAULT e = [(DEFAULT, [], e)]