#4894: Missing improvement for fun. deps.
----------------------------------------+-----------------------------------
Reporter: diatchki | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler (Type checker) | Version: 7.1
Keywords: | Testcase:
Blockedby: | Difficulty:
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: None/Unknown
----------------------------------------+-----------------------------------
Comment(by diatchki):
I was thinking that each FD for a class, F, would correspond to a
built-in rule of the form:
{{{
ByFD F 0 :: (F a b, F a c) => (b ~ c)
...
ByFD F n :: ...
}}}
and we'd use these rules to reason about FDs. The rules would work both
for givens (in which case they'd generate new facts), and for wanteds
(in which case they'd generate new goals). As far as I understand, there
would be no need for any special "improvement" code because everything
would be handled by the code for reasoning about equality. Furthermore,
we'd have a record of where FD-improvement kicked in, for sanity checking
purposes.
We ensure that the rule is valid by rejecting instances that might violate
it.
This is essentially the same as checking that the instances of a type
family
are consistent with each other, which is why we can conclude that
{{{(B a ~ b, B a ~ c) => b ~ c}}}.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4894#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs