-{-% 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
setOccNameSpace,
-- ** Derived OccNames
- mkDataConWrapperOcc, mkWorkerOcc, mkDefaultMethodOcc, mkDerivedTyConOcc,
- mkNewTyCoOcc,
+ 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,
#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
mkIPOcc = mk_simple_deriv varName "$i"
mkSpecOcc = mk_simple_deriv varName "$s"
mkForeignExportOcc = mk_simple_deriv varName "$f"
-mkNewTyCoOcc = mk_simple_deriv tcName "Co"
+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"
-- 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"