}
ppr_expr add_par (Case expr var ty [(con,args,rhs)])
+ | opt_PprCaseAsLet
+ = add_par $
+ sep [sep [ ptext (sLit "let")
+ <+> char '{'
+ <+> ppr_case_pat con args
+ <+> ptext (sLit "~")
+ <+> ppr_bndr var
+ , ptext (sLit "<-")
+ <+> ppr_expr id expr
+ , char '}'
+ <+> ptext (sLit "in")
+ ]
+ , pprCoreExpr rhs
+ ]
+
+ | otherwise
= add_par $
sep [sep [ptext (sLit "case") <+> pprCoreExpr expr,
ifPprDebug (braces (ppr ty)),
sep [ptext (sLit "of") <+> ppr_bndr var,
- char '{' <+> ppr_case_pat con args]
+ char '{' <+> ppr_case_pat con args <+> arrow]
],
pprCoreExpr rhs,
char '}'
pprCoreAlt :: OutputableBndr a => (AltCon, [a] , Expr a) -> SDoc
pprCoreAlt (con, args, rhs)
- = hang (ppr_case_pat con args) 2 (pprCoreExpr rhs)
+ = hang (ppr_case_pat con args <+> arrow) 2 (pprCoreExpr rhs)
ppr_case_pat :: OutputableBndr a => AltCon -> [a] -> SDoc
ppr_case_pat (DataAlt dc) args
| isTupleTyCon tc
- = tupleParens (tupleTyConBoxity tc) (hsep (punctuate comma (map ppr_bndr args))) <+> arrow
+ = tupleParens (tupleTyConBoxity tc) (hsep (punctuate comma (map ppr_bndr args)))
where
ppr_bndr = pprBndr CaseBind
tc = dataConTyCon dc
ppr_case_pat con args
- = ppr con <+> sep (map ppr_bndr args) <+> arrow
+ = ppr con <+> sep (map ppr_bndr args)
where
ppr_bndr = pprBndr CaseBind
------ Debugging ----------------------------------------------------
, Flag "dppr-debug" (PassFlag addOpt)
+ , Flag "dppr-user-length" (AnySuffix addOpt)
+ , Flag "dppr-case-as-let" (PassFlag addOpt)
, Flag "dsuppress-all" (PassFlag addOpt)
, Flag "dsuppress-uniques" (PassFlag addOpt)
, Flag "dsuppress-coercions" (PassFlag addOpt)
, Flag "dsuppress-type-applications" (PassFlag addOpt)
, Flag "dsuppress-idinfo" (PassFlag addOpt)
, Flag "dsuppress-type-signatures" (PassFlag addOpt)
- , Flag "dppr-user-length" (AnySuffix addOpt)
, Flag "dopt-fuel" (AnySuffix addOpt)
, Flag "dtrace-level" (AnySuffix addOpt)
, Flag "dno-debug-output" (PassFlag addOpt)
-- Output style options
opt_PprUserLength,
+ opt_PprCaseAsLet,
opt_PprStyle_Debug, opt_TraceLevel,
opt_NoDebugOutput,
|| lookUp (fsLit "-dsuppress-type-signatures")
+-- | Display case expressions with a single alternative as strict let bindings
+opt_PprCaseAsLet :: Bool
+opt_PprCaseAsLet
+ = lookUp (fsLit "-dppr-case-as-let")
+
opt_PprStyle_Debug :: Bool
opt_PprStyle_Debug = lookUp (fsLit "-dppr-debug")