[Haskell-cafe] Re: Numeric type classes
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.
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 ...
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.
More information about the Haskell-Cafe