Fix scoped type variables for expression type signatures
[ghc-hetmet.git] / compiler / basicTypes / OccName.lhs
index 48137c6..cae76a6 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, 
@@ -442,6 +443,7 @@ 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"
@@ -477,6 +479,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"