Make records work properly with type families
[ghc-hetmet.git] / compiler / basicTypes / OccName.lhs
index a5b32ed..0ca7f5f 100644 (file)
@@ -31,7 +31,7 @@ module OccName (
        mkSpecOcc, mkForeignExportOcc, mkGenOcc1, mkGenOcc2,
        mkDataTOcc, mkDataCOcc, mkDataConWorkerOcc,
        mkSuperDictSelOcc, mkLocalOcc, mkMethodOcc, mkInstTyTcOcc,
-       mkInstTyCoOcc, 
+       mkInstTyCoOcc, mkEqPredCoOcc,
 
        -- ** Deconstruction
        occNameFS, occNameString, occNameSpace, 
@@ -92,8 +92,8 @@ isSymbol = const False
 %************************************************************************
 
 \begin{code}
-data NameSpace = VarName       -- Variables, including "source" data constructors
-              | DataName       -- "Real" data constructors 
+data NameSpace = VarName       -- Variables, including "real" data constructors
+              | DataName       -- "Source" data constructors 
               | TvName         -- Type variables
               | TcClsName      -- Type constructors and classes; Haskell has them
                                -- in the same name space for now.
@@ -176,8 +176,9 @@ instance Eq OccName where
     (OccName sp1 s1) == (OccName sp2 s2) = s1 == s2 && sp1 == sp2
 
 instance Ord OccName where
-    compare (OccName sp1 s1) (OccName sp2 s2) = (s1  `compare` s2) `thenCmp`
-                                               (sp1 `compare` sp2)
+       -- Compares lexicographically, *not* by Unique of the string
+    compare (OccName sp1 s1) (OccName sp2 s2) 
+       = (s1  `compare` s2) `thenCmp` (sp1 `compare` sp2)
 \end{code}
 
 
@@ -445,6 +446,7 @@ 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
+mkEqPredCoOcc      = mk_simple_deriv tcName  "$co"
 
 -- Generic derivable classes
 mkGenOcc1           = mk_simple_deriv varName  "$gfrom"