[Haskell-cafe] How to define an operation in terms of itself (but of different type)?

Olex P hoknamahn at gmail.com
Sat Jan 24 10:35:22 EST 2009


But you know it doesn't make too much sense because I also have to define
addition Scalar + Vector (that means construct vector from scalar and add a
vector), Vector + Scalar and so on. And as we are not able to overload
operations in C++ like way we have to create several different operations
even if their meaning is pretty close. Probably it's possible with ad hoc
overloading but I don't know is it good idea.

On Sat, Jan 24, 2009 at 1:56 PM, Alberto G. Corona <agocorona at gmail.com>wrote:

> What about making your Vector a instance of Num? you have + and * well
> defined , although * is not commutative in this case
>
> 2009/1/24 Olex P <hoknamahn at gmail.com>
>
>> Yeah guys. I confused myself. I forgot why I had to implement several "+"
>> operators (^+^, ^+, ^+. etc.) for Vector class. Now I've got an idea again.
>> Different names make a perfect sense.
>>
>> Thanks a lot.
>>
>>
>> On Sat, Jan 24, 2009 at 6:34 AM, Luke Palmer <lrpalmer at gmail.com> wrote:
>>
>>> 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
>>>
>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090124/4a39f428/attachment.htm


More information about the Haskell-Cafe mailing list