2009/1/24 Dan Piponi <dpip...@gmail.com>:
> 2009/1/23 Olex P <hoknam...@gmail.com>:
>
>> class Vector v where
>>     (^+^)       :: v -> v -> v
>>
>> data Vector3 = V3 !Double !Double !Double
>>
>> instance Vector Vector3 where
>>     (V3 x1 y1 z1) ^+^ (V3 x2 y2 z2) = V3 (x1 + x2) (y1 + y2) (z1 + z2)
>>
>> class Matrix m where
>>     (^+^)     :: m -> m -> m
>>
>> data Matrix3 = M3 !Vector3 !Vector3 !Vector3
>>
>> instance Matrix Matrix3 where
>>     (M3 r11 r12 r13) ^+^ (M3 r21 r22 r23) = M3 (r11 ^+^ r21)
>>                                                                   (r12 ^+^
>> r22)
>>                                                                   (r13 ^+^
>> r23)
>>
>> Hope this is better :)
>> So yeah... r11 ^+^ r21 just doesn't work.
>
> It works fine if you make Matrix3 an instance of Vector.
> --
> Dan

To paraphrase a bit, your Vector class simply means :
a type is a Vector if it provides an operation having a -> a -> a
has its type (and called ^+^).

The Matrix class says exactly the same thing, so don't bother
repeat that... and simply make Vector3 and Matrix3 instances
of Vector (which could then be renamed in Add or Plus or
something).

Thu
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to