import DataCon ( dataConTyCon )
import TyCon ( tupleTyConBoxity, isTupleTyCon )
import Type ( pprParendType, pprType, pprParendKind )
+import Coercion ( coercionKindTyConApp )
import BasicTypes ( tupleParens, isNoOcc, isAlwaysActive )
import Util ( lengthIs )
import Outputable
ppr_expr add_par (Var name) = ppr name
ppr_expr add_par (Lit lit) = ppr lit
+ppr_expr add_par (Cast expr co)
+ = add_par $
+ sep [pprParendExpr expr,
+ ptext SLIT("`cast`") <+> parens (pprCo co)]
+ where
+ pprCo co = sep [ppr co, dcolon <+> ppr (coercionKindTyConApp co)]
+
+
ppr_expr add_par expr@(Lam _ _)
= let
(bndrs, body) = collectBinders expr
ppr_expr add_par (Note (SCC cc) expr)
= add_par (sep [pprCostCentreCore cc, pprCoreExpr expr])
-#ifdef DEBUG
-ppr_expr add_par (Note (Coerce to_ty from_ty) expr)
- = add_par $
- getPprStyle $ \ sty ->
- if debugStyle sty then
- sep [ptext SLIT("__coerce") <+>
- sep [pprParendType to_ty, pprParendType from_ty],
- pprParendExpr expr]
- else
- sep [hsep [ptext SLIT("__coerce"), pprParendType to_ty],
- pprParendExpr expr]
-#else
-ppr_expr add_par (Note (Coerce to_ty from_ty) expr)
- = add_par $
- sep [sep [ptext SLIT("__coerce"), nest 2 (pprParendType to_ty)],
- pprParendExpr expr]
-#endif
-
-ppr_expr add_par (Note InlineCall expr)
- = add_par (ptext SLIT("__inline_call") <+> pprParendExpr expr)
-
ppr_expr add_par (Note InlineMe expr)
= add_par $ ptext SLIT("__inline_me") <+> pprParendExpr expr
-- Lambda bound type variables are preceded by "@"
pprCoreBinder LambdaBind bndr = parens (pprTypedBinder bndr)
--- Case bound things don't get a signature or a herald
-pprCoreBinder CaseBind bndr = pprUntypedBinder bndr
+-- Case bound things don't get a signature or a herald, unless we have debug on
+pprCoreBinder CaseBind bndr
+ = getPprStyle $ \ sty ->
+ if debugStyle sty then
+ parens (pprTypedBinder bndr)
+ else
+ pprUntypedBinder bndr
pprUntypedBinder binder
| isTyVar binder = ptext SLIT("@") <+> ppr binder -- NB: don't print kind
doc | no_info = empty
| otherwise
- = brackets $ hcat [ppr prag_info, ppr occ_info,
+ = brackets $ hsep [ppr prag_info, ppr occ_info,
ppr dmd_info, ppr lbv_info
#ifdef OLD_STRICTNESS
, ppr (demandInfo id)