Separate language option handling into 2 phases
[ghc-hetmet.git] / compiler / typecheck / TcDeriv.lhs
index 3a05380..5fcb45c 100644 (file)
@@ -436,10 +436,7 @@ makeDerivSpecs is_boot tycl_decls inst_decls deriv_decls
 
     all_tydata :: [(LHsType Name, LTyClDecl Name)]
        -- Derived predicate paired with its data type declaration
-    all_tydata = extractTyDataPreds tycl_decls ++
-                [ pd                -- Traverse assoc data families
-                 | L _ (InstDecl _ _ _ ats) <- inst_decls
-                , pd <- extractTyDataPreds ats ]
+    all_tydata = extractTyDataPreds (instDeclATs inst_decls ++ tycl_decls)
 
     deriv_locs = map (getLoc . snd) all_tydata
                 ++ map getLoc deriv_decls
@@ -551,8 +548,8 @@ When there are no type families, it's quite easy:
     newtype S a = MkS [a]
     -- :CoS :: S  ~ [] -- Eta-reduced
 
-    instance Eq [a] => Eq (S a)        -- by coercion sym (Eq (coMkS a)) : Eq [a] ~ Eq (S a)
-    instance Monad [] => Monad S       -- by coercion sym (Monad coMkS)  : Monad [] ~ Monad S 
+    instance Eq [a] => Eq (S a)        -- by coercion sym (Eq (:CoS a)) : Eq [a] ~ Eq (S a)
+    instance Monad [] => Monad S       -- by coercion sym (Monad :CoS)  : Monad [] ~ Monad S 
 
 When type familes are involved it's trickier:
 
@@ -980,7 +977,7 @@ cond_functorOK allowFunctions (dflags, rep_tc)
     functions  = ptext (sLit "contains function types")
     wrong_arg  = ptext (sLit "uses the type variable in an argument other than the last")
 
-checkFlag :: DynFlag -> Condition
+checkFlag :: LanguageFlag -> Condition
 checkFlag flag (dflags, _)
   | dopt flag dflags = Nothing
   | otherwise        = Just why