- dsPArrComp (map unLoc qs ++ [resStmt]) undefined `thenDs` \cqs ->
- let ty'cqs = parrElemType cqs
- cea' = mkApps (Var zipP) [Type ty'cea, Type ty'cqs, cea, cqs]
- in
- dePArrComp (ParStmt qss : qss2) pa' cea'
+ dePArrComp qs pa' (mkApps (Var crossP) [Type ty'cea, Type ty'ceQss,
+ cea, ceQss])
+ where
+ deParStmt [] =
+ -- empty parallel statement lists have not source representation
+ panic "DsListComp.dePArrComp: Empty parallel list comprehension"
+ deParStmt ((qs, xs):qss) = -- first statement
+ let resStmt = ResultStmt $ mkExplicitTuple (map nlHsVar xs)
+ in
+ dsPArrComp (map unLoc qs ++ [resStmt]) undefined `thenDs` \cqs ->
+ parStmts qss (mkTuplePat (map nlVarPat xs)) cqs
+ ---
+ parStmts [] pa cea = return (pa, cea)
+ parStmts ((qs, xs):qss) pa cea = -- subsequent statements (zip'ed)
+ dsLookupGlobalId zipPName `thenDs` \zipP ->
+ let pa' = mkTuplePat [pa, mkTuplePat (map nlVarPat xs)]
+ ty'cea = parrElemType cea
+ resStmt = ResultStmt $ mkExplicitTuple (map nlHsVar xs)
+ in
+ dsPArrComp (map unLoc qs ++ [resStmt]) undefined `thenDs` \cqs ->
+ let ty'cqs = parrElemType cqs
+ cea' = mkApps (Var zipP) [Type ty'cea, Type ty'cqs, cea, cqs]
+ in
+ parStmts qss pa' cea'