[Haskell-cafe] Re: Numeric type classes

Brian Hulley brianh at metamilk.com
Tue Sep 12 17:16:58 EDT 2006


Bryan Burgers wrote:
> That being said, I'll have to play the other side of the coin: it
> would probably be a little bit of a pain to have to define instances
> of each data declaration (Integer, Int, Float, Matrix, Complex, etc.)
> on each of these seperate classes--especially when being in a certain
> class usually implies being in another (ie, the definition of a set
> being a field requires that that set is a group, right?)

Aaron Denney wrote:
> On 2006-09-12, Bryan Burgers <bryan.burgers at gmail.com> wrote:
>> And another problem I can see is that, for example, the Integers are
>> a group over addition, and also a group over multiplication;
> 
> Not over multiplication, no, because there is no inverse.
> 
> I know of no good way to express that a given data type obeys the
> same interface two (or more) ways.  Some OO languages try to handle
> the case of of an abstract base class being inherited twice through
> two different intermediate classes, but none of them do it well.

How about:

    data Multiply = Multiply
    data Add = Add

    class Group c e where
        group :: c -> e -> e -> e
        identity :: c -> e
        inverse :: c -> e -> e

    instance Group Multiply Rational where
        group Multiply x y = ...
        identity Multiply = 1
        inverse Multiply x = ...

    instance Group Add Rational where
        group Add x y = ...
        identity Add = 0
        inverse Add x = ...

    (+) :: Group Add a => a -> a -> a
    (+) = group Add

    (*) = group Multiply

    class (Group Multiply a, Group Add a) => Field a where ...

Regards, Brian.
-- 
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.

http://www.metamilk.com


More information about the Haskell-Cafe mailing list