[GHC] #9918: GHC chooses an instance between two overlapping, but cannot resolve a clause within the similar closed type family
GHC
ghc-devs at haskell.org
Wed Dec 31 01:51:08 UTC 2014
#9918: GHC chooses an instance between two overlapping, but cannot resolve a
clause within the similar closed type family
-------------------------------------+-------------------------------------
Reporter: qnikst | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case:
Related Tickets: | Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by qnikst):
Seems I understood Simon differently. As far as I understood he advices
make check for classes more strict, and less strict. So
1. For classes instances:
{{{
instance F a (M a) where ...
instance F a a where ...
}}}
Will no longer be accepted due to surely-apart check. And Equals
typefamily will have the same rules as it has now.
2. As less programs will be accepted, and some really relies on the
current behaviour, it's possible to introduce `{-# UNDECIDABLE #-}` pragma
for type class that will remove new "surely-apart" check and instances
will be accepted
3. (Simon didn't say it). In order to unify type families and type class
bevaiour it's possible to allow `{-# UNDECIDANBLE #-}` pragma to be
applied to type family. Yes, if it will be applied to a typefamily that
should have surely-apart check (e.g. `Equals`) it will be broken. However
if programmer takes responsibility and guarantee that this check is not
needed (2 examples above) then
he can use this pragma in order to make compiler accept this program.
So as far as I understood this suggestion doesn't allow any new ill-typed
program to be accepted, more over some programs that are accepted now will
not be accepted then, but proposal provides a backdoor so programmer can
have old behaviour.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9918#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list