#7543: Constraint synonym instances
    Reporter:  monoidal          |       Owner:                  
        Type:  bug               |      Status:  new             
    Priority:  normal            |   Milestone:                  
   Component:  Compiler          |     Version:  7.6.1           
    Keywords:                    |          Os:  Unknown/Multiple
Architecture:  Unknown/Multiple  |     Failure:  None/Unknown    
  Difficulty:  Unknown           |    Testcase:                  
   Blockedby:                    |    Blocking:                  
     Related:                    |  
Changes (by simonpj):

  * difficulty:  => Unknown


 I can see your point; and I agree it's odd that it's accepted when no
 methods are given. But it's not easy to fix in the way you want.  Here's

 Suppose we have
 class C a where
   reverse :: a -> a
 instance C Int where
   reverse x = x
 When GHC encounters the binding `reverse x = x`, it has to figure out
 which `reverse` you mean -- there are two in scope. Ah!  Since this is in
 an instnace declaraction, it must be the one that's method of class `C`,
 not the one from `Prelude`.

 This scope resolution is done by the '''renamer'''.  The renamer does not
 understand type synonyms (they are interpreted by the subsequent '''type
 checker'''), so it can't figure out that `Ring` really means `Num` in your

 I can't see an easy way round this in GHC's current structure.  The only
 think that comes to mind is to postpone all scope resolution for instance
 bindings until the type checker.  But that would mean a bit of an upheaval
 of datatypes etc.  Quite do-able, but not very simple.

 As things stand it might be more consistent to reject an instance
 declaration if the "class" turns out to be a synonym.

 I'm rather inclined to do nothing!


Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7543#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

Glasgow-haskell-bugs mailing list

Reply via email to