IMP_Ubiq()
IMPORT_DELOOPER(DsLoop) ( match, matchSimply )
-import HsSyn ( HsExpr(..), OutPat(..), HsLit(..),
- Match, HsBinds, Stmt, Qualifier, PolyType, ArithSeqInfo )
+import HsSyn ( HsExpr(..), OutPat(..), HsLit(..), Fixity,
+ Match, HsBinds, Stmt, DoOrListComp, HsType, ArithSeqInfo )
import TcHsSyn ( SYN_IE(TypecheckedPat) )
import DsHsSyn ( outPatType )
import CoreSyn
import CoreUtils ( coreExprType, mkCoreIfThenElse )
import PprStyle ( PprStyle(..) )
import PrelVals ( iRREFUT_PAT_ERROR_ID, voidId )
-import Pretty ( ppShow )
-import Id ( idType, dataConArgTys, mkTupleCon,
+import Pretty ( ppShow, ppBesides, ppStr )
+import Id ( idType, dataConArgTys,
-- pprId{-ToDo:rm-},
SYN_IE(DataCon), SYN_IE(DictVar), SYN_IE(Id), GenId )
import Literal ( Literal(..) )
-import TyCon ( mkTupleTyCon, isNewTyCon, tyConDataCons )
+import PprType ( GenType, GenTyVar )
+import TyCon ( isNewTyCon, tyConDataCons )
import Type ( mkTyVarTys, mkRhoTy, mkForAllTys, mkFunTy,
- mkTheta, isUnboxedType, applyTyCon, getAppTyCon
+ mkTheta, isUnboxedType, applyTyCon, getAppTyCon,
+ GenType {- instances -}
)
+import TyVar ( GenTyVar {- instances -} )
import TysPrim ( voidTy )
+import TysWiredIn ( tupleTyCon, unitDataCon, tupleCon )
import UniqSet ( mkUniqSet, minusUniqSet, uniqSetToList, SYN_IE(UniqSet) )
import Util ( panic, assertPanic{-, pprTrace ToDo:rm-} )
+import Unique ( Unique )
import Usage ( SYN_IE(UVar) )
---import PprCore{-ToDo:rm-}
---import PprType--ToDo:rm
---import Pretty--ToDo:rm
---import TyVar--ToDo:rm
---import Unique--ToDo:rm
+import SrcLoc ( SrcLoc {- instance Outputable -} )
\end{code}
%************************************************************************
-> DsM CoreExpr
mkErrorAppDs err_id ty msg
- = getSrcLocDs `thenDs` \ (file, line) ->
+ = getSrcLocDs `thenDs` \ src_loc ->
let
- full_msg = file ++ "|" ++ line ++ "|" ++msg
+ full_msg = ppShow 80 (ppBesides [ppr PprForUser src_loc, ppStr "|", ppStr msg])
msg_lit = NoRepStr (_PK_ full_msg)
in
returnDs (mkApp (Var err_id) [] [ty] [LitArg msg_lit])
= if is_simple_tuple_pat pat then
mkTupleBind tyvars [] locals_and_globals val_expr
else
- mkErrorAppDs iRREFUT_PAT_ERROR_ID res_ty "" `thenDs` \ error_msg ->
+ mkErrorAppDs iRREFUT_PAT_ERROR_ID res_ty pat_string `thenDs` \ error_msg ->
matchSimply val_expr pat res_ty local_tuple error_msg `thenDs` \ tuple_expr ->
mkTupleBind tyvars [] locals_and_globals tuple_expr
where
is_var_pat (VarPat v) = True
is_var_pat other = False -- Even wild-card patterns aren't acceptable
+
+ pat_string = ppShow 80 (ppr PprForUser pat)
\end{code}
We're about to match against some patterns. We want to make some
tuple_var_ty
= mkForAllTys tyvars $
mkRhoTy theta $
- applyTyCon (mkTupleTyCon no_of_binders)
+ applyTyCon (tupleTyCon no_of_binders)
(map idType locals)
where
theta = mkTheta (map idType dicts)
\begin{code}
mkTupleExpr :: [Id] -> CoreExpr
-mkTupleExpr [] = Con (mkTupleCon 0) []
+mkTupleExpr [] = Con unitDataCon []
mkTupleExpr [id] = Var id
-mkTupleExpr ids = mkCon (mkTupleCon (length ids))
+mkTupleExpr ids = mkCon (tupleCon (length ids))
[{-usages-}]
(map idType ids)
[ VarArg i | i <- ids ]
expr
mkTupleSelector expr vars the_var
- = Case expr (AlgAlts [(mkTupleCon arity, vars, Var the_var)]
+ = Case expr (AlgAlts [(tupleCon arity, vars, Var the_var)]
NoDefault)
where
arity = length vars