; let (binds', bind_dus) = depAnalBinds binds_w_dus
+ -- We do the check-sigs after renaming the bindings,
+ -- so that we have convenient access to the binders
; check_sigs (okBindSig (duDefs bind_dus)) sigs'
; return (ValBindsOut binds' sigs',
---------------------
depAnalBinds :: Bag (LHsBind Name, [Name], Uses)
-> ([(RecFlag, LHsBinds Name)], DefUses)
--- Dependency analysis; this is important so that unused-binding
--- reporting is accurate
+-- Dependency analysis; this is important so that
+-- unused-binding reporting is accurate
depAnalBinds binds_w_dus
= (map get_binds sccs, map get_du sccs)
where
check_sigs ok_sig sigs
-- Check for (a) duplicate signatures
-- (b) signatures for things not in this group
- = do { mappM_ unknownSigErr sigs'
- ; mappM_ dupSigDeclErr (findDupsEq eqHsSig sigs') }
+ = do { mappM_ unknownSigErr (filter bad sigs)
+ ; mappM_ dupSigDeclErr (findDupsEq eqHsSig sigs) }
where
-- Don't complain about an unbound name again
- sigs' = filter bad sigs
bad sig = not (ok_sig sig) &&
case sigName sig of
Just n | isUnboundName n -> False