Prevent users from defining instances for abstract classes.
[ghc.git] / compiler / types / Class.hs
index cd9f8de..ecc7e2e 100644 (file)
@@ -18,6 +18,7 @@ module Class (
         classKey, className, classATs, classATItems, classTyCon, classMethods,
         classOpItems, classBigSig, classExtraBigSig, classTvsFds, classSCTheta,
         classAllSelIds, classSCSelId, classMinimalDef, classHasFds,
+        isAbstractClass,
         naturallyCoherentClass
     ) where
 
@@ -302,6 +303,10 @@ classExtraBigSig (Class {classTyVars = tyvars, classFunDeps = fundeps,
                          }})
   = (tyvars, fundeps, sc_theta, sc_sels, ats, op_stuff)
 
+isAbstractClass :: Class -> Bool
+isAbstractClass Class{ classBody = AbstractClass } = True
+isAbstractClass _ = False
+
 -- | If a class is "naturally coherent", then we needn't worry at all, in any
 -- way, about overlapping/incoherent instances. Just solve the thing!
 naturallyCoherentClass :: Class -> Bool