[Haskell-cafe] How to define an operation in terms of itself (but
of different type)?
Luke Palmer
lrpalmer at gmail.com
Sat Jan 24 01:34:15 EST 2009
2009/1/23 Brandon S. Allbery KF8NH <allbery at ece.cmu.edu>
> On 2009 Jan 23, at 17:58, Olex P wrote:
>
> class Vector v where
> (^+^) :: v -> v -> v
>
> class Matrix m where
> (^+^) :: m -> m -> m
>
>
> You can't reuse the same operator in different classes. Vector "owns"
> (^+^), so Matrix can't use it itself. You could say
>
> > instance Matrix m => Vector m where
> > (^+^) = ...
>
No you can't! Stop thinking you can do that!
It would be sane to do:
class Vector m => Matrix m where
-- matrix ops that don't make sense on vector
Thus anything that implements Matrix must first implement Vector. Which is
sane because matrices are square vectors with some additional structure, in
some sense.
Luke
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090123/1ddc7692/attachment.htm
More information about the Haskell-Cafe
mailing list