Module header tidyup, phase 1
[ghc-hetmet.git] / compiler / basicTypes / OccName.lhs
index a3661a9..92351d6 100644 (file)
@@ -1,10 +1,8 @@
-{-% DrIFT (Automatic class derivations for Haskell) v1.1 %-}
 %
+% (c) The University of Glasgow 2006
 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
 %
 
-\section[OccName]{@OccName@}
-
 \begin{code}
 module OccName (
        -- * The NameSpace type; abstact
@@ -27,11 +25,13 @@ module OccName (
        setOccNameSpace,
 
        -- ** Derived OccNames
-       mkDataConWrapperOcc, mkWorkerOcc, mkDefaultMethodOcc, mkDerivedTyConOcc,
+       mkDataConWrapperOcc, mkWorkerOcc, mkDefaultMethodOcc,
+       mkDerivedTyConOcc, mkNewTyCoOcc,
        mkClassTyConOcc, mkClassDataConOcc, mkDictOcc, mkIPOcc, 
        mkSpecOcc, mkForeignExportOcc, mkGenOcc1, mkGenOcc2,
        mkDataTOcc, mkDataCOcc, mkDataConWorkerOcc,
-       mkSuperDictSelOcc, mkLocalOcc, mkMethodOcc,
+       mkSuperDictSelOcc, mkLocalOcc, mkMethodOcc, mkInstTyTcOcc,
+       mkInstTyCoOcc, 
 
        -- ** Deconstruction
        occNameFS, occNameString, occNameSpace, 
@@ -63,19 +63,18 @@ module OccName (
 
 #include "HsVersions.h"
 
-import Util            ( thenCmp )
-import Unique          ( Unique, mkUnique, Uniquable(..) )
-import BasicTypes      ( Boxity(..), Arity )
-import StaticFlags     ( opt_PprStyle_Debug )
+import Util
+import Unique
+import BasicTypes
+import StaticFlags
 import UniqFM
 import UniqSet
 import FastString
 import Outputable
 import Binary
 
-import GLAEXTS
-
-import Data.Char       ( isUpper, isLower, ord )
+import GHC.Exts
+import Data.Char
 
 -- Unicode TODO: put isSymbol in libcompat
 #if __GLASGOW_HASKELL__ > 604
@@ -425,7 +424,7 @@ mk_deriv occ_sp sys_prefix str = mkOccName occ_sp (sys_prefix ++ str)
 mkDataConWrapperOcc, mkWorkerOcc, mkDefaultMethodOcc, mkDerivedTyConOcc,
        mkClassTyConOcc, mkClassDataConOcc, mkDictOcc, mkIPOcc, 
        mkSpecOcc, mkForeignExportOcc, mkGenOcc1, mkGenOcc2,
-       mkDataTOcc, mkDataCOcc, mkDataConWorkerOcc
+       mkDataTOcc, mkDataCOcc, mkDataConWorkerOcc, mkNewTyCoOcc
    :: OccName -> OccName
 
 -- These derived variables have a prefix that no Haskell value could have
@@ -440,6 +439,8 @@ mkDictOcc       = mk_simple_deriv varName  "$d"
 mkIPOcc                    = mk_simple_deriv varName  "$i"
 mkSpecOcc          = mk_simple_deriv varName  "$s"
 mkForeignExportOcc  = mk_simple_deriv varName  "$f"
+mkNewTyCoOcc        = mk_simple_deriv tcName  ":Co"
+mkInstTyCoOcc       = mk_simple_deriv tcName  ":Co"      -- derived from rep ty
 
 -- Generic derivable classes
 mkGenOcc1           = mk_simple_deriv varName  "$gfrom"
@@ -475,6 +476,16 @@ mkLocalOcc uniq occ
        -- that need encoding (e.g. 'z'!)
 \end{code}
 
+Derive a name for the representation type constructor of a data/newtype
+instance.
+
+\begin{code}
+mkInstTyTcOcc :: Int                   -- Index
+             -> OccName                -- Family name (e.g. "Map")
+             -> OccName                -- Nice unique version (":R23Map")
+mkInstTyTcOcc index occ
+   = mk_deriv tcName (":R" ++ show index) (occNameString occ)
+\end{code}
 
 \begin{code}
 mkDFunOcc :: String            -- Typically the class and type glommed together e.g. "OrdMaybe"