How overload operator in Haskell?
Hal Daume
t-hald@microsoft.com
Wed, 9 Jul 2003 08:11:23 -0700
What you want to do is make your Vector an instance of the Num(eric)
type class. For instance:
instance Num Vector where
(+) v1 v2 =3D zipWith (+) v1 v2
(-) v1 v2 =3D zipWith (-) v1 v2
negate v1 =3D map negate v1
abs v1 =3D map abs v1
(*) v1 v2 =3D ...
fromInteger i =3D ...
signum v1 =3D ...
I've left the last three blank because it's unclear what should go
there. Since (*) has type Vector->Vector->Vector (in this instance),
you can't use dot product or something like that.
signum :: Vector->Vector could be written and just return [-1], [0] or
[1], I suppose.
fromInteger :: Integer->Vector is a little harder. Perhaps just
'fromInteger i =3D [fromInteger i]' would be acceptable. Or you could
leave these undefined.
--
Hal Daume III | hdaume@isi.edu
"Arrest this man, he talks in maths." | www.isi.edu/~hdaume
> -----Original Message-----
> From: haskell-admin@haskell.org=20
> [mailto:haskell-admin@haskell.org] On Behalf Of Liu Junfeng
> Sent: Wednesday, July 09, 2003 7:25 AM
> To: haskell@haskell.org
> Subject: How overload operator in Haskell?
>=20
>=20
> I've learned haskell months, but I still can't understand the=20
> type system very well.
> I can only write:
> -----------------------------------
> type Vector =3D [Double]
> vadd,vsub :: Vector->Vector->Vector
> v1 `vadd` v2 =3D zipWith (+) v1 v2
> v1 `vsub` v2 =3D zipWith (-) v1 v2
> svmul :: Double->Vector->Vector
> s `svmul` v =3D map (s*) v
> ------------------------------------
> Tough it works, it is not convenient to use. How to create a=20
> Vector type and overload=20
> mathematical operators?=20
> Thanks for your help.=20
>=20
> Liu Junfeng
> liujf@softhome.net
>=20
>=20
>=20
> _______________________________________________
> Haskell mailing list
> Haskell@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell
>=20