import TcDeriv
import TcEnv
import RnEnv ( lookupGlobalOccRn )
+import RnSource ( addTcgDUs )
import TcHsType
import TcUnify
import TcSimplify
-- a) local instance decls
-- b) generic instances
-- c) local family instance decls
- ; addInsts local_info $ do {
- ; addInsts generic_inst_info $ do {
- ; addFamInsts at_idx_tycons $ do {
+ ; addInsts local_info $
+ addInsts generic_inst_info $
+ addFamInsts at_idx_tycons $ do {
-- (4) Compute instances from "deriving" clauses;
-- This stuff computes a context for the derived instance
failIfErrsM -- If the addInsts stuff gave any errors, don't
-- try the deriving stuff, becuase that may give
-- more errors still
- ; (deriv_inst_info, deriv_binds) <- tcDeriving tycl_decls inst_decls
- deriv_decls
+ ; (deriv_inst_info, deriv_binds, deriv_dus)
+ <- tcDeriving tycl_decls inst_decls deriv_decls
; gbl_env <- addInsts deriv_inst_info getGblEnv
- ; return (gbl_env,
+ ; return ( addTcgDUs gbl_env deriv_dus,
generic_inst_info ++ deriv_inst_info ++ local_info,
aux_binds `plusHsValBinds` deriv_binds)
- }}}}}
+ }}}
where
-- Make sure that toplevel type instance are not for associated types.
-- !!!TODO: Need to perform this check for the TyThing of type functions,
(Nothing, NoDefMeth) -> do -- No default method in the class
{ warn <- doptM Opt_WarnMissingMethods
; warnTc (warn -- Warn only if -fwarn-missing-methods
- && reportIfUnused (getOccName sel_id))
+ && not (startsWithUnderscore (getOccName sel_id)))
-- Don't warn about _foo methods
omitted_meth_warn
; return (error_rhs, emptyBag) }