-import HsSyn ( OutPat(..), HsExpr(..), Stmt(..),
+import HsSyn ( Pat(..), HsExpr(..), Stmt(..),
import TcHsSyn ( TypecheckedStmt, TypecheckedPat, TypecheckedHsExpr,
import TcHsSyn ( TypecheckedStmt, TypecheckedPat, TypecheckedHsExpr,
splitTyConApp_maybe )
import TysPrim ( alphaTyVar )
import TysWiredIn ( nilDataCon, consDataCon, unitDataConId, unitTy,
splitTyConApp_maybe )
import TysPrim ( alphaTyVar )
import TysWiredIn ( nilDataCon, consDataCon, unitDataConId, unitTy,
import Match ( matchSimply )
import PrelNames ( trueDataConName, falseDataConName, foldrName,
buildName, replicatePName, mapPName, filterPName,
import Match ( matchSimply )
import PrelNames ( trueDataConName, falseDataConName, foldrName,
buildName, replicatePName, mapPName, filterPName,
in
newSysLocalsDs [c_ty,n_ty] `thenDs` \ [c, n] ->
dfListComp c n quals `thenDs` \ result ->
in
newSysLocalsDs [c_ty,n_ty] `thenDs` \ [c, n] ->
dfListComp c n quals `thenDs` \ result ->
returnDs (Var build_id `App` Type elt_ty
`App` mkLams [n_tyvar, c, n] result)
returnDs (Var build_id `App` Type elt_ty
`App` mkLams [n_tyvar, c, n] result)
u3_ty@u1_ty = exprType core_list1 -- two names, same thing
-- u1_ty is a [alpha] type, and u2_ty = alpha
u3_ty@u1_ty = exprType core_list1 -- two names, same thing
-- u1_ty is a [alpha] type, and u2_ty = alpha
pat core_rest (Var b) `thenDs` \ core_expr ->
-- now build the outermost foldr, and return
pat core_rest (Var b) `thenDs` \ core_expr ->
-- now build the outermost foldr, and return
let ty = parrElemType cea
in
deLambda ty pa e' `thenDs` \(clam,
let ty = parrElemType cea
in
deLambda ty pa e' `thenDs` \(clam,
-- <<[:e' | b, qs:]>> pa ea = <<[:e' | qs:]>> pa (filterP (\pa -> b) ea)
--
dePArrComp (ExprStmt b _ _ : qs) pa cea =
-- <<[:e' | b, qs:]>> pa ea = <<[:e' | qs:]>> pa (filterP (\pa -> b) ea)
--
dePArrComp (ExprStmt b _ _ : qs) pa cea =
let ty = parrElemType cea
in
deLambda ty pa b `thenDs` \(clam,_) ->
let ty = parrElemType cea
in
deLambda ty pa b `thenDs` \(clam,_) ->
-- <<[:e' | qs:]>> (pa, p) (crossP ea ef)
--
dePArrComp (BindStmt p e _ : qs) pa cea =
-- <<[:e' | qs:]>> (pa, p) (crossP ea ef)
--
dePArrComp (BindStmt p e _ : qs) pa cea =
- dsLookupGlobalValue falseDataConName `thenDs` \falseId ->
- dsLookupGlobalValue trueDataConName `thenDs` \trueId ->
- dsLookupGlobalValue filterPName `thenDs` \filterP ->
- dsLookupGlobalValue crossPName `thenDs` \crossP ->
+ dsLookupGlobalId falseDataConName `thenDs` \falseId ->
+ dsLookupGlobalId trueDataConName `thenDs` \trueId ->
+ dsLookupGlobalId filterPName `thenDs` \filterP ->
+ dsLookupGlobalId crossPName `thenDs` \crossP ->
-- {x_1, ..., x_n} = DV (ds) -- Defined Variables
--
dePArrComp (LetStmt ds : qs) pa cea =
-- {x_1, ..., x_n} = DV (ds) -- Defined Variables
--
dePArrComp (LetStmt ds : qs) pa cea =
--
dePArrComp (ParStmtOut [] : qss2) pa cea = dePArrComp qss2 pa cea
dePArrComp (ParStmtOut ((xs, qs):qss) : qss2) pa cea =
--
dePArrComp (ParStmtOut [] : qss2) pa cea = dePArrComp qss2 pa cea
dePArrComp (ParStmtOut ((xs, qs):qss) : qss2) pa cea =
let pa' = TuplePat [pa, TuplePat (map VarPat xs) Boxed] Boxed
ty'cea = parrElemType cea
resStmt = ResultStmt (ExplicitTuple (map HsVar xs) Boxed) noSrcLoc
let pa' = TuplePat [pa, TuplePat (map VarPat xs) Boxed] Boxed
ty'cea = parrElemType cea
resStmt = ResultStmt (ExplicitTuple (map HsVar xs) Boxed) noSrcLoc