[GHC] #8021: Multiple constraint classes - the alternative to superclass
GHC
ghc-devs at haskell.org
Mon Jul 8 21:12:16 CEST 2013
#8021: Multiple constraint classes - the alternative to superclass
-------------------------------------+------------------------------------
Reporter: wvv | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.6.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Changes (by wvv):
* difficulty: => Unknown
Comment:
It's also useful other cases.
We have
{{{
class Num a where
(+), (*) :: a -> a -> a
(-) :: a -> a -> a
negate :: a -> a
fromInteger :: Integer -> a
}}}
Let we also have
{{{
class Additive a where
plus :: a -> a -> a
zero :: a
class Additive a => AdditiveNegation a where
minus :: a -> a -> a
negation :: a -> a
x `minus` y = x `plus` negation y
class Multiplicative a where
multiply :: a -> a -> a
one :: a
class FromInteger a where
fromInteger' :: Integer -> a
}}}
Now we wish to unite both of them
For example, we could also define next:
{{{
class (Additive a,
Additive a => AdditiveNegation a,
Multiplicative a, FromInteger a) => Num a where
(+) = plus
(*) = multiply
(-) = minus
negate = negation
fromInteger = fromInteger'
class (Num a) => Additive a where
plus = (+)
zero :: a
default zero :: () => Additive a => a
default zero = zero
class (Num a) => AdditiveNegation a where
minus = (-)
negation = negate
class (Num a) => Multiplicative a where
multiply = (*)
one :: a
default one :: () => Multiplicative a => a
default one = one
class (Num a) => FromInteger a where
fromInteger' = fromInteger
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8021#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list