[Haskell-beginners] class and instance question
Lyndon Maydwell
maydwell at gmail.com
Thu May 20 06:49:22 EDT 2010
It looks like you've given the Vector2D type an argument, but not used
one for the BasicVector instance.
On Thu, May 20, 2010 at 6:35 PM, Walck, Scott <walck at lvc.edu> wrote:
> Hi folks,
>
> I'm trying to make doubles and triples act like vectors, as in
>
> (3,4) <+> (7,8) ==> (10,12)
> (3,2,1) <+> (9,8,7) ==> (12,10,8)
> 6 *> (1,2,3) ==> (6,12,18)
>
> I thought I should make a type class so that I could use <+> for both double addition and triple addition,
> and *> for both double and triple scalar multiplication. (Some of this functionality is provided by
> NumericPrelude, but I didn't need all of that, and I hoped this would be simple to write.)
> The code below gives the error
>
> NewVectorShort.hs:19:0:
> Type synonym `Vector2D' should have 1 argument, but has been given 0
> In the instance declaration for `BasicVector Vector2D'
> Failed, modules loaded: none.
>
> I don't understand how what I'm trying to do is different from, say, the Monad instance for Maybe.
> (Maybe a) is a type, and (Vector2D a) is a type.
>
> Thanks,
>
> Scott
>
>
>
> {-# LANGUAGE TypeSynonymInstances #-}
>
> infixl 6 <+>
> infixl 6 <->
> infixl 7 *>
> infixl 7 <*
>
> class BasicVector v where
> (<+>) :: v a -> v a -> v a
> (<->) :: v a -> v a -> v a
> (*>) :: Num a => a -> v a -> v a
> (<*) :: Num a => v a -> a -> v a
> v1 <-> v2 = v1 <+> fromInteger (-1) *> v2
> v1 <* c = c *> v1
> c *> v1 = v1 <* c
>
> type Vector2D a = (a,a)
>
> instance BasicVector Vector2D where
> (ax,ay) <+> (bx,by) = (ax+bx,ay+by)
> c *> (ax,ay) = (c*ax,c*ay)
>
>
>
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
More information about the Beginners
mailing list