move and generalize an instance (#1405)
authorIsaac Dupree <id@isaac.cedarswampstudios.org>
Wed, 26 Dec 2007 17:19:13 +0000 (17:19 +0000)
committerIsaac Dupree <id@isaac.cedarswampstudios.org>
Wed, 26 Dec 2007 17:19:13 +0000 (17:19 +0000)
UserOfLocalRegs (ZLast Last) isn't Haskell98, but it was just as
good an instance to be UserOfLocalRegs a => UserOfLocalRegs (ZLast a)

compiler/cmm/ZipCfg.hs
compiler/cmm/ZipCfgCmmRep.hs

index 228504c..85727a3 100644 (file)
@@ -37,6 +37,8 @@ where
 
 #include "HsVersions.h"
 
+import CmmExpr ( UserOfLocalRegs(..) ) --for an instance
+
 import Outputable hiding (empty)
 import Panic
 import Unique
@@ -140,6 +142,14 @@ data ZLast l
                  -- so we don't want to pollute the 'l' type parameter with it
   | LastOther l
 
+--So that we don't have orphan instances, this goes here or in CmmExpr.
+--At least UserOfLocalRegs (ZLast Last) is needed (Last defined elsewhere),
+--but there's no need for non-Haskell98 instances for that.
+instance UserOfLocalRegs a => UserOfLocalRegs (ZLast a) where
+    foldRegsUsed  f z (LastOther l) = foldRegsUsed f z l
+    foldRegsUsed _f z LastExit      = z
+
+
 data ZHead m   = ZFirst BlockId  | ZHead (ZHead m) m
     -- ZHead is a (reversed) sequence of middle nodes labeled by a BlockId
 data ZTail m l = ZLast (ZLast l) | ZTail m (ZTail m l)
index c5464e2..f0dc535 100644 (file)
@@ -182,10 +182,6 @@ instance UserOfLocalRegs Last where
             last (LastCondBranch e _ _) = foldRegsUsed f z e
             last (LastSwitch e _tbl)    = foldRegsUsed f z e
 
-instance UserOfLocalRegs (ZLast Last) where
-    foldRegsUsed  f z (LastOther l) = foldRegsUsed f z l
-    foldRegsUsed _f z LastExit      = z
-
 
 ----------------------------------------------------------------------
 ----- Instance declarations for prettyprinting (avoids recursive imports)