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

Luke Palmer lrpalmer at gmail.com
Fri Jan 23 17:46:56 EST 2009


2009/1/23 Olex P <hoknamahn at gmail.com>

> Hello Haskellers!
> It's probably a simple question but I can't find a proper solution...
> Suppose we have a class Vector which overloads (+) operation. I'd like to
> represent a Matrix data type as a set of vectors:
>
> data Matrix3 = M3 !Vector3 !Vector3 !Vector3
>
> In this case (+) for matrices could be implemented as:
>
>  (M3 r11 r12 r13) + (M3 r21 r22 r23) = M3 (r11 + r21) (r12 + r22) (r13 +
> r23)
>
> But GHC says about ambiguous occurrence. I don't understand why because
> it's should be pretty clear that rows are vectors and (+) has to be vector
> type as well. I could use Vector.+ instead but it doesn't look good.
> Probably I'm missing something. Any ideas?


I'm am seeing an image.  It's a... a Vector class, with an operation (+).
 Oh, he's with another one though.  It's the Num class.  Oh they're fighting
over the (+).  Vector is trying to take it from Num, but Num isn't letting
go.

Why doesn't Vector see that there is a whole pile of operations neglected in
the corner, like (^+^), (.+.).  He just really wants that (+), huh...

Luke
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090123/e1b84d2c/attachment-0001.htm


More information about the Haskell-Cafe mailing list