type equivalency

Jon Fairbairn Jon.Fairbairn@cl.cam.ac.uk
Wed, 05 Jun 2002 22:39:37 +0100

> For example all functions with Int -> Int are type equivalent
> However,
> =

> data D a b =3D MkD a b

All objects D Int Int are type equivalent.  I'm not sure what
your question means, otherwise.

If you define =

data Function a b =3D F (a -> b)

apply:: Function a b -> a -> b
apply (F f) a =3D f a

you add an extra level of constructor, but you can still use
anything of type Function Int Int where Function Int Int is

square:: Function Int Int
square =3D F (\ a -> a*a)

sqare_root:: Function Int Int
square_root =3D F (\ a -> round (sqrt (fromIntegral a)))

E&OE -- it's about my bedtime.

-- =

J=F3n Fairbairn                                 Jon.Fairbairn@cl.cam.ac.u=
31 Chalmers Road                                         jf@cl.cam.ac.uk
Cambridge CB1 3SZ            +44 1223 570179 (after 14:00 only, please!)