2 % (c) The AQUA Project, Glasgow University, 1996
4 \section[PprEnv]{The @PprEnv@ type}
13 pCon, pLit, pValBndr, pOcc, pPrim, pSCC,
18 #include "HsVersions.h"
20 import {-# SOURCE #-} Id ( Id )
21 import {-# SOURCE #-} PrimOp ( PrimOp )
22 import {-# SOURCE #-} CostCentre ( CostCentre )
24 import Type ( GenType )
25 import TyVar ( GenTyVar )
26 import Literal ( Literal )
28 import Unique ( Unique )
29 import UniqFM ( emptyUFM, UniqFM )
32 %************************************************************************
34 \subsection{Public interfaces for Core printing (excluding instances)}
36 %************************************************************************
39 data PprEnv flexi bndr occ
40 = PE (Literal -> SDoc)
45 (GenTyVar flexi -> SDoc) -- to print tyvar binders
46 (GenTyVar flexi -> SDoc) -- to print tyvar occurrences
47 (GenType flexi -> SDoc) -- to print types
49 (BindingSite -> bndr -> SDoc) -- to print val_bdrs
50 (occ -> SDoc) -- to print bindees
54 @BindingSite@ is used to tell the thing that prints binder what
55 language construct is binding the identifier.
58 data BindingSite = LambdaBind | CaseBind | LetBind
63 :: Maybe (Literal -> SDoc)
65 -> Maybe (PrimOp -> SDoc)
66 -> Maybe (CostCentre -> SDoc)
67 -> Maybe (GenTyVar flexi -> SDoc)
68 -> Maybe (GenTyVar flexi -> SDoc)
69 -> Maybe (GenType flexi -> SDoc)
70 -> Maybe (BindingSite -> bndr -> SDoc)
71 -> Maybe (occ -> SDoc)
72 -> PprEnv flexi bndr occ
74 -- you can specify all the printers individually; if
75 -- you don't specify one, you get bottom
77 initPprEnv l d p c tvb tvo ty val_bndr occ
88 demaybe Nothing = bottom
91 bottom = panic "PprEnv.initPprEnv: unspecified printing function"
95 pLit (PE pp _ _ _ _ _ _ _ _) = pp
96 pCon (PE _ pp _ _ _ _ _ _ _) = pp
97 pPrim (PE _ _ pp _ _ _ _ _ _) = pp
98 pSCC (PE _ _ _ pp _ _ _ _ _) = pp
100 pTyVarB (PE _ _ _ _ pp _ _ _ _) = pp
101 pTyVarO (PE _ _ _ _ _ pp _ _ _) = pp
102 pTy (PE _ _ _ _ _ _ pp _ _) = pp
104 pValBndr (PE _ _ _ _ _ _ _ pp _) = pp
105 pOcc (PE _ _ _ _ _ _ _ _ pp) = pp