Add missing signatures
[ghc-hetmet.git] / compiler / typecheck / TcDeriv.lhs
index 3a05380..6482e79 100644 (file)
@@ -334,9 +334,10 @@ renameDeriv is_boot gen_binds insts
                -- notably "con2tag" and/or "tag2con" functions.  
                -- Bring those names into scope before renaming the instances themselves
        ; loc <- getSrcSpanM    -- Generic loc for shared bindings
-       ; let aux_binds = listToBag $ map (genAuxBind loc) $ 
-                         rm_dups [] $ concat deriv_aux_binds
-       ; rn_aux_lhs <- rnTopBindsLHS emptyFsEnv (ValBindsIn aux_binds [])
+       ; let (aux_binds, aux_sigs) = unzip $ map (genAuxBind loc) $ 
+                                     rm_dups [] $ concat deriv_aux_binds
+              aux_val_binds = ValBindsIn (listToBag aux_binds) aux_sigs
+       ; rn_aux_lhs <- rnTopBindsLHS emptyFsEnv aux_val_binds
        ; let aux_names = collectHsValBinders rn_aux_lhs
 
        ; bindLocalNames aux_names $ 
@@ -436,10 +437,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 +549,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 +978,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 :: ExtensionFlag -> Condition
 checkFlag flag (dflags, _)
   | dopt flag dflags = Nothing
   | otherwise        = Just why