Thomas Davie <[EMAIL PROTECTED]> writes:
> Yes, and you can indeed do a similar thing in Haskell. The natural
> thing to do here would be to define a type Shape...
> data Shape = Circle Int
> | Rectangle Int Int
> | Square Int
> If however, you *really* want to keep your shapes as being seperate
> types, then you'll want to invoke the class system (note, not the same
> as OO classes).
>
> class Shape a where
> area :: a -> Int
>
> newtype Circle = C Int
>
> instance Shape Circle where
> area (C r) = pi * r^2
There's a third way, too, and I haven't seen anybody mention it yet
(apologies if I just missed it). You can provide an explicit record
of the relevant "member functions", and "instantiate" it in different
ways. E.g.
data Shape = Shape { area :: Int }
square x = Shape (x^2)
rectangle x y = Shape (x*y)
circle r = Shape (pi*r^2)
-k
--
If I haven't seen further, it is by standing in the footprints of giants
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe