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