Commit 82098fef authored by simonpj's avatar simonpj
Browse files

[project @ 2005-01-06 10:04:30 by simonpj]

Wibble to ambiguity reporting
parent c6923d4c
......@@ -1933,15 +1933,15 @@ tc_simplify_top is_interactive wanteds
bad_guys = non_stds ++ concat std_bads
(non_ips, bad_ips) = partition isClassDict bad_guys
(ambigs, no_insts) = partition is_ambig non_ips
is_ambig d = not (isEmptyVarSet (tyVarsOfInst d))
is_ambig d = not (tyVarsOfInst d `subVarSet` fixed_tvs)
fixed_tvs = oclose (fdPredsOfInsts irreds) emptyVarSet
-- If the dict has free type variables, it's almost certainly ambiguous,
-- and that's the first thing to fix
-- and that's the first thing to fix.
-- Otherwise, addNoInstanceErrs does the right thing
-- [ Previously, there was a different no_inst definition:
-- no_inst d = not (isTyVarDict d) || tyVarsOfInst d `subVarSet` fixed_tvs
-- fixed_tvs = oclose (fdPredsOfInsts tidy_dicts) emptyVarSet
-- But that seems over-elaborate to me; it only bites for class decls with
-- fundeps like this: class C a b | -> b where ...]
-- I say "almost certain" because we might have
-- class C a b | a -> B where ...
-- plus an Inst (C Int x). Then the 'x' isn't ambiguous; it's just that
-- there's no instance decl for (C Int ...). Hence the oclose.
-- Report definite errors
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment