[project @ 1998-04-07 07:51:07 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / PprEnv.lhs
index 1cd1071..6e07e39 100644 (file)
 \section[PprEnv]{The @PprEnv@ type}
 
 \begin{code}
-#include "HsVersions.h"
-
 module PprEnv (
-       PprEnv{-abstract-},
+       PprEnv{-abstract-}, 
+       BindingSite(..),
 
        initPprEnv,
 
-       pCon, pLit, pMajBndr, pMinBndr, pOcc, pPrim, pSCC, pStyle,
-       pTy, pTyVar, pUVar, pUse
+       pCon, pLit, pValBndr, pOcc, pPrim, pSCC, 
+       pTy, pTyVarB, pTyVarO
+       
     ) where
 
-import Ubiq{-uitous-}
+#include "HsVersions.h"
+
+import {-# SOURCE #-} Id ( Id )
+import {-# SOURCE #-} PrimOp ( PrimOp )
+import {-# SOURCE #-} CostCentre ( CostCentre )
 
-import Id              ( DataCon(..) )
-import Pretty          ( Pretty(..) )
-import Util            ( panic )
+import Type            ( GenType )
+import TyVar           ( GenTyVar   )
+import Literal          ( Literal )
+import Outputable
+import Unique          ( Unique )
+import UniqFM          ( emptyUFM, UniqFM )
 \end{code}
 
-For tyvars and uvars, we {\em do} normally use these homogenized
-names; for values, we {\em don't}.  In printing interfaces, though,
-we use homogenized value names, so that interfaces don't wobble
-uncontrollably from changing Unique-based names.
+%************************************************************************
+%*                                                                     *
+\subsection{Public interfaces for Core printing (excluding instances)}
+%*                                                                     *
+%************************************************************************
 
 \begin{code}
-data PprEnv tyvar uvar bndr occ
-  = PE PprStyle                -- stored for safe keeping
+data PprEnv flexi bndr occ
+  = PE (Literal    -> SDoc)
+       (Id         -> SDoc)
+       (PrimOp     -> SDoc)
+       (CostCentre -> SDoc)
 
-       (Literal    -> Pretty)  -- Doing these this way saves
-       (DataCon    -> Pretty)  -- carrying around a PprStyle
-       (PrimOp     -> Pretty)
-       (CostCentre -> Pretty)
+       (GenTyVar flexi -> SDoc)        -- to print tyvar binders
+       (GenTyVar flexi -> SDoc)        -- to print tyvar occurrences
+       (GenType flexi -> SDoc)         -- to print types
 
-       (tyvar -> Pretty)       -- to print tyvars
-       (uvar -> Pretty)        -- to print usage vars
+       (BindingSite -> bndr -> SDoc)   -- to print val_bdrs
+       (occ                 -> SDoc)   -- to print bindees
 
-       (bndr -> Pretty)        -- to print "major" val_bdrs
-       (bndr -> Pretty)        -- to print "minor" val_bdrs
-       (occ  -> Pretty)        -- to print bindees
+\end{code}
+
+@BindingSite@ is used to tell the thing that prints binder what
+language construct is binding the identifier.
 
-       (GenType tyvar uvar -> Pretty)
-       (GenUsage uvar -> Pretty)
+\begin{code}
+data BindingSite = LambdaBind | CaseBind | LetBind
 \end{code}
 
 \begin{code}
 initPprEnv
-       :: PprStyle
-       -> Maybe (Literal -> Pretty)
-       -> Maybe (DataCon -> Pretty)
-       -> Maybe (PrimOp  -> Pretty)
-       -> Maybe (CostCentre -> Pretty)
-       -> Maybe (tyvar -> Pretty)
-       -> Maybe (uvar -> Pretty)
-       -> Maybe (bndr -> Pretty)
-       -> Maybe (bndr -> Pretty)
-       -> Maybe (occ -> Pretty)
-       -> Maybe (GenType tyvar uvar -> Pretty)
-       -> Maybe (GenUsage uvar -> Pretty)
-       -> PprEnv tyvar uvar bndr occ
+       :: Maybe (Literal -> SDoc)
+       -> Maybe (Id -> SDoc)
+       -> Maybe (PrimOp  -> SDoc)
+       -> Maybe (CostCentre -> SDoc)
+       -> Maybe (GenTyVar flexi -> SDoc)
+       -> Maybe (GenTyVar flexi -> SDoc)
+       -> Maybe (GenType flexi -> SDoc)
+       -> Maybe (BindingSite -> bndr -> SDoc)
+       -> Maybe (occ -> SDoc)
+       -> PprEnv flexi bndr occ
 
 -- you can specify all the printers individually; if
 -- you don't specify one, you get bottom
 
-initPprEnv sty l d p c tv uv maj_bndr min_bndr occ ty use
-  = PE sty
-       (demaybe l)
+initPprEnv l d p c tvb tvo ty val_bndr occ
+  = PE (demaybe l)
        (demaybe d)
        (demaybe p)
        (demaybe c)
-       (demaybe tv)
-       (demaybe uv)
-       (demaybe maj_bndr)
-       (demaybe min_bndr)
-       (demaybe occ)
+       (demaybe tvb)
+       (demaybe tvo)
        (demaybe ty)
-       (demaybe use)
+       (demaybe val_bndr)
+       (demaybe occ)
   where
     demaybe Nothing  = bottom
     demaybe (Just x) = x
 
     bottom = panic "PprEnv.initPprEnv: unspecified printing function"
-
-{-
-initPprEnv sty pmaj pmin pocc
-  = PE (ppr sty)   -- for a Literal
-       (ppr sty)   -- for a DataCon
-       (ppr sty)   -- for a PrimOp
-       (\ cc -> ppStr (showCostCentre sty True cc)) -- CostCentre
-
-       (ppr sty)   -- for a tyvar
-       (ppr sty)   -- for a usage var
-
-       pmaj pmin pocc -- for GenIds in various guises
-
-       (ppr sty)   -- for a Type
-       (ppr sty)   -- for a Usage
--}
 \end{code}
 
 \begin{code}
-pStyle  (PE s  _  _  _  _  _  _  _  _  _  _  _) = s
-pLit    (PE _ pp  _  _  _  _  _  _  _  _  _  _) = pp
-pCon    (PE _  _ pp  _  _  _  _  _  _  _  _  _) = pp
-pPrim   (PE _  _  _ pp  _  _  _  _  _  _  _  _) = pp
-pSCC    (PE _  _  _  _ pp  _  _  _  _  _  _  _) = pp
-                                              
-pTyVar  (PE _  _  _  _  _ pp  _  _  _  _  _  _) = pp
-pUVar   (PE _  _  _  _  _  _ pp  _  _  _  _  _) = pp
-                                              
-pMajBndr (PE _ _  _  _  _  _  _ pp  _  _  _  _) = pp
-pMinBndr (PE _ _  _  _  _  _  _  _ pp  _  _  _) = pp
-pOcc     (PE _ _  _  _  _  _  _  _  _ pp  _  _) = pp
-                              
-pTy      (PE _ _  _  _  _  _  _  _  _  _ pp  _) = pp
-pUse    (PE _  _  _  _  _  _  _  _  _  _  _ pp) = pp
+pLit    (PE pp  _  _  _  _  _   _  _  _) = pp
+pCon    (PE  _ pp  _  _  _  _   _  _  _) = pp
+pPrim   (PE  _  _ pp  _  _  _   _  _  _) = pp
+pSCC    (PE  _  _  _ pp  _  _   _  _  _) = pp
+                                   
+pTyVarB         (PE  _  _  _  _  pp _   _  _  _) = pp
+pTyVarO         (PE  _  _  _  _  _  pp  _  _  _) = pp
+pTy      (PE  _  _  _  _  _  _   pp _  _) = pp
+                                   
+pValBndr (PE  _  _  _  _  _  _   _ pp  _) = pp
+pOcc     (PE  _  _  _  _  _  _   _ _  pp) = pp
 \end{code}