[project @ 1996-04-05 08:26:04 by partain]
[ghc-hetmet.git] / ghc / compiler / basicTypes / PprEnv.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1996
3 %
4 \section[PprEnv]{The @PprEnv@ type}
5
6 \begin{code}
7 #include "HsVersions.h"
8
9 module PprEnv (
10         PprEnv{-abstract-},
11
12         initPprEnv,
13
14         pCon, pLit, pMajBndr, pMinBndr, pOcc, pPrim, pSCC, pStyle,
15         pTy, pTyVar, pUVar, pUse
16     ) where
17
18 import Ubiq{-uitous-}
19
20 import Id               ( DataCon(..) )
21 import Pretty           ( Pretty(..) )
22 import Util             ( panic )
23 \end{code}
24
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.
29
30 \begin{code}
31 data PprEnv tyvar uvar bndr occ
32   = PE  PprStyle                -- stored for safe keeping
33
34         (Literal    -> Pretty)  -- Doing these this way saves
35         (DataCon    -> Pretty)  -- carrying around a PprStyle
36         (PrimOp     -> Pretty)
37         (CostCentre -> Pretty)
38
39         (tyvar -> Pretty)       -- to print tyvars
40         (uvar -> Pretty)        -- to print usage vars
41
42         (bndr -> Pretty)        -- to print "major" val_bdrs
43         (bndr -> Pretty)        -- to print "minor" val_bdrs
44         (occ  -> Pretty)        -- to print bindees
45
46         (GenType tyvar uvar -> Pretty)
47         (GenUsage uvar -> Pretty)
48 \end{code}
49
50 \begin{code}
51 initPprEnv
52         :: PprStyle
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
65
66 -- you can specify all the printers individually; if
67 -- you don't specify one, you get bottom
68
69 initPprEnv sty l d p c tv uv maj_bndr min_bndr occ ty use
70   = PE sty
71        (demaybe l)
72        (demaybe d)
73        (demaybe p)
74        (demaybe c)
75        (demaybe tv)
76        (demaybe uv)
77        (demaybe maj_bndr)
78        (demaybe min_bndr)
79        (demaybe occ)
80        (demaybe ty)
81        (demaybe use)
82   where
83     demaybe Nothing  = bottom
84     demaybe (Just x) = x
85
86     bottom = panic "PprEnv.initPprEnv: unspecified printing function"
87
88 {-
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
94
95         (ppr sty)   -- for a tyvar
96         (ppr sty)   -- for a usage var
97
98         pmaj pmin pocc -- for GenIds in various guises
99
100         (ppr sty)   -- for a Type
101         (ppr sty)   -- for a Usage
102 -}
103 \end{code}
104
105 \begin{code}
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
111                                                
112 pTyVar   (PE _  _  _  _  _ pp  _  _  _  _  _  _) = pp
113 pUVar    (PE _  _  _  _  _  _ pp  _  _  _  _  _) = pp
114                                                
115 pMajBndr (PE _  _  _  _  _  _  _ pp  _  _  _  _) = pp
116 pMinBndr (PE _  _  _  _  _  _  _  _ pp  _  _  _) = pp
117 pOcc     (PE _  _  _  _  _  _  _  _  _ pp  _  _) = pp
118                                
119 pTy      (PE _  _  _  _  _  _  _  _  _  _ pp  _) = pp
120 pUse     (PE _  _  _  _  _  _  _  _  _  _  _ pp) = pp
121 \end{code}