
At 2001-08-18 17:29, Mansour Al-Mutairi wrote:
data SomeObject2 = SO SomeObject | SomeReal Double ... same2 :: SomeObject2 -> SomeObject2 -> Bool same2 (SomeReal a) (SomeReal b) = a == b same2 x y = same x y
This won't help you if you already have modules that use 'SomeObject' and 'same'. In OOP you can extend a 'Base' class in module M1 with a 'Derived' class in module M2. M1 knows nothing about 'Derived', and yet code in M1 that manipulates 'Base' objects will be able to handle 'Derived' objects, since every 'Derived' object is also a 'Base' (upcasting). Furthermore it is possible for M2 to determine whether a 'Base' object from a function or structure in M1 is also a 'Derived' object and use it appropriately (downcasting). You can't do this in Haskell (or O'Haskell for that matter), though you could with extensible data-types: module M1 where data Base = _ foo :: Base -> Integer foo _ = 0 module M2 where data Derived = MyDerived Int Char data Base |= DerivedBase Derived foo (DerivedBase (MyDerived i _)) = i upcast :: Derived -> Base upcast = DerivedBase downcast :: Base -> Maybe Derived downcast (DerivedBase d) = Just d downcast _ = Nothing -- Ashley Yakeley, Seattle WA
participants (1)
-
Ashley Yakeley