[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