HaloO, I wonder how an object can change its type without loosing its identity. Consider two types Rectangle and Polygon with Rectangle a subtype of Polygon. Now if there is a method add_vertex in the Polygon type, calling it on a Rectangle warps the object out of the Rectangle type into a Polygon with five vertices. How does the implementation of Rectangle::add_vertex achieve this type warp?
For a subset type the warping might occur automatically because the where clause fails: subset Rectangle of Polygon where { .num_vertices == 4 && ... } A class type might just call self.bless(Polygon) after adapting the internal representation. But how does an object loose a role? Should there be an undoes or strip operator that does the inverse of runtime role composition? Have a nice weekend. --