
#9117: Coercible constraint solver misses one -------------------------------------+------------------------------------ Reporter: goldfire | Owner: nomeata Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Comment (by nomeata):
So, if this all works, there has to be some way of dealing with the overlap and a small amount of "search".
Well, the way is „do whatever comes first“. It works because the rewrite system is confluent (I hope that’s the right term), i.e. we don’t run into dead ends if we do on or the other first.
Is the case in this ticket somehow different/worse?
Yes, as `Coercible Foo1 Foo2` would be a dead end. It ''might'' work to try `Coercible f g => Coercion (f a) (g a)` only if no other instance matches. The code is able to do so, but I don’t particularly like that. We can add it if we don’t have a better idea ''and'' there there is a use case for it. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9117#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler