Straightened out implicit coercions for indexed types
[ghc-hetmet.git] / compiler / basicTypes / OccName.lhs
index 48137c6..9319c67 100644 (file)
@@ -27,12 +27,13 @@ module OccName (
        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, 
@@ -477,6 +478,25 @@ mkLocalOcc uniq occ
        -- that need encoding (e.g. 'z'!)
 \end{code}
 
+\begin{code}
+
+-- Derive a name for the representation type constructor of a data/newtype
+-- instance.
+--
+mkInstTyTcOcc :: Int                   -- Index
+             -> OccName                -- Local name (e.g. "Map")
+             -> OccName                -- Nice unique version (":R23Map")
+mkInstTyTcOcc index occ
+   = mk_deriv varName (":R" ++ show index) (occNameString occ)
+
+-- Derive a name for the coercion of a data/newtype instance.
+--
+mkInstTyCoOcc :: Int                   -- Index
+             -> OccName                -- Local name (e.g. "Map")
+             -> OccName                -- Nice unique version (":Co23Map")
+mkInstTyCoOcc index occ
+   = mk_deriv varName (":Co" ++ show index) (occNameString occ)
+\end{code}
 
 \begin{code}
 mkDFunOcc :: String            -- Typically the class and type glommed together e.g. "OrdMaybe"