
At 2001-08-14 03:46, Marcin 'Qrczak' Kowalczyk wrote (on the Libraries list):
I've noticed that the more I use Haskell, the less I miss subtyping... classes and "data" unions are almost always sufficient.
They are sometimes a better match than subtyping (e.g. parametrizing a gcd algorithm by a type) and sometimes they are not capable at all (e.g. heterogeneous collections when the set of possible types is open). I'm a big fan of Haskell's typing and I'm not a fan of OOP, but Haskell is sometimes not as expressible as the OO way.
One possible solution would be to extend Haskell with "open" algebraic data types. For instance: data SomeObject = SomeInt Int | SomeString String | _ ...later... data SomeObject |= SomeReal Double The "_" would mark a data type as 'open', and the "|=" syntax would be used to extend it in another module. This seems to me straightforward, but perhaps not very useful unless there's a way of declaring "generic" functions on these types that can be extended somehow later: same :: SomeObject -> SomeObject -> Bool same (SomeInt a) (SomeInt b) = a == b same (SomeString a) (SomeString b) = a == b same _ _ = False ...later... same (SomeReal a) (SomeReal b) = a == b -- this case needs to be "inserted" somehow But would this sort of thing solve your problem? -- Ashley Yakeley, Seattle WA
participants (1)
-
Ashley Yakeley