2 % (c) The AQUA Project, Glasgow University, 1996
4 \section[PprEnv]{The @PprEnv@ type}
7 #include "HsVersions.h"
14 pCon, pLit, pMajBndr, pMinBndr, pOcc, pPrim, pSCC, pStyle,
15 pTy, pTyVar, pUVar, pUse
20 import Id ( DataCon(..) )
21 import Pretty ( Pretty(..) )
25 For tyvars and uvars, we {\em do} normally use these homogenized
26 names; for values, we {\em don't}. In printing interfaces, though,
27 we use homogenized value names, so that interfaces don't wobble
28 uncontrollably from changing Unique-based names.
31 data PprEnv tyvar uvar bndr occ
32 = PE PprStyle -- stored for safe keeping
34 (Literal -> Pretty) -- Doing these this way saves
35 (DataCon -> Pretty) -- carrying around a PprStyle
37 (CostCentre -> Pretty)
39 (tyvar -> Pretty) -- to print tyvars
40 (uvar -> Pretty) -- to print usage vars
42 (bndr -> Pretty) -- to print "major" val_bdrs
43 (bndr -> Pretty) -- to print "minor" val_bdrs
44 (occ -> Pretty) -- to print bindees
46 (GenType tyvar uvar -> Pretty)
47 (GenUsage uvar -> Pretty)
53 -> Maybe (Literal -> Pretty)
54 -> Maybe (DataCon -> Pretty)
55 -> Maybe (PrimOp -> Pretty)
56 -> Maybe (CostCentre -> Pretty)
57 -> Maybe (tyvar -> Pretty)
58 -> Maybe (uvar -> Pretty)
59 -> Maybe (bndr -> Pretty)
60 -> Maybe (bndr -> Pretty)
61 -> Maybe (occ -> Pretty)
62 -> Maybe (GenType tyvar uvar -> Pretty)
63 -> Maybe (GenUsage uvar -> Pretty)
64 -> PprEnv tyvar uvar bndr occ
66 -- you can specify all the printers individually; if
67 -- you don't specify one, you get bottom
69 initPprEnv sty l d p c tv uv maj_bndr min_bndr occ ty use
83 demaybe Nothing = bottom
86 bottom = panic "PprEnv.initPprEnv: unspecified printing function"
89 initPprEnv sty pmaj pmin pocc
90 = PE (ppr sty) -- for a Literal
91 (ppr sty) -- for a DataCon
92 (ppr sty) -- for a PrimOp
93 (\ cc -> ppStr (showCostCentre sty True cc)) -- CostCentre
95 (ppr sty) -- for a tyvar
96 (ppr sty) -- for a usage var
98 pmaj pmin pocc -- for GenIds in various guises
100 (ppr sty) -- for a Type
101 (ppr sty) -- for a Usage
106 pStyle (PE s _ _ _ _ _ _ _ _ _ _ _) = s
107 pLit (PE _ pp _ _ _ _ _ _ _ _ _ _) = pp
108 pCon (PE _ _ pp _ _ _ _ _ _ _ _ _) = pp
109 pPrim (PE _ _ _ pp _ _ _ _ _ _ _ _) = pp
110 pSCC (PE _ _ _ _ pp _ _ _ _ _ _ _) = pp
112 pTyVar (PE _ _ _ _ _ pp _ _ _ _ _ _) = pp
113 pUVar (PE _ _ _ _ _ _ pp _ _ _ _ _) = pp
115 pMajBndr (PE _ _ _ _ _ _ _ pp _ _ _ _) = pp
116 pMinBndr (PE _ _ _ _ _ _ _ _ pp _ _ _) = pp
117 pOcc (PE _ _ _ _ _ _ _ _ _ pp _ _) = pp
119 pTy (PE _ _ _ _ _ _ _ _ _ _ pp _) = pp
120 pUse (PE _ _ _ _ _ _ _ _ _ _ _ pp) = pp