[GHC] #8021: Multiple constraint classes - the alternative to superclass

GHC ghc-devs at haskell.org
Fri Jun 28 23:50:31 CEST 2013


#8021: Multiple constraint classes - the alternative to superclass
-----------------------------+----------------------------------------------
Reporter:  wvv               |          Owner:                  
    Type:  feature request   |         Status:  new             
Priority:  normal            |      Component:  Compiler        
 Version:  7.6.3             |       Keywords:                  
      Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
 Failure:  None/Unknown      |      Blockedby:                  
Blocking:                    |        Related:                  
-----------------------------+----------------------------------------------
 This is alternative to SuperClasses - multiple constraint Classes

 Now:
 {{{
  class Monoid a where ...

  class Monad m => MonadPlus m where ...
 }}}
 It could be:

 {{{
  class Monoid a where ...

  class Monad m => Monoid m where ...

  class Arrow c => Monoid c where ...

  foo :: Monad m => Monoid m => m a

 }}}

 all classes must have same functions with same kind.

 And if you wish to write superclass, it would be easy to write

 {{{
 class BeforeNum a where ....

 class BeforeNum a => Num a where ...

 foo :: BeforeNum a => Num a => a
 }}}


 '''Backward compatibility'''

 If class have single constraint, you could write without it.

 If class have many constrains, you could write without it, if it is empty
 one.


 {{{
  bar :: MonadPlus m => m a  <<==>>  bar :: Monad m => MonadPlus m => m a

  foo :: Monoid a => a       <<==>>  foo :: () => Monoid a => a
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/8021>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list