Dario Teixeira wrote: >Hi, > > > >>That seems backwards from the way OO inheritance is supposed to work. >>You don't go from a more feature-rich case to a less feature-rich case >>-- it's the other way around. >> >> > >Of course it is -- that is precisely why inheritance is the wrong >formalism for my problem! What I need is a "reverse inheritance" >formalism, where a fully defined data structure sits at the root, >and whose descendants are PRUNED versions of the parent. > > The problem with this is that it violates one of the assumptions of typing, that if type A is (also) a type B, than anywhere you can use a type B, you can also use a type A. This isn't an assumption limited to object oriented languages. And this isn't true in your example- if type A is lacking members type B has, then it's possible to write situations where a "real" type B can be used, but not a type A- just use a field of type B that type A doesn't have. I think I'd recommend rethinking your approach to the problem. Brian