> Nick --
> 
> I've been thinking of it like this:
> 
>   class int isa intlike; # and isa value or whatever
>   class Int isa intlike; # and isa Object or whatever
> 
>   class num isa numlike; # and isa value or whatever
>   class Num isa numlike; # and isa Object or whatever
> 
>   ...
> 
>   class Scalar isa intlike, numlike, ...; # and isa Object or whatever
> 
> The *like classes are placeholder (interface) classes that capture
> the ability to *treat as* (as opposed to *really is*). And (importantly
> IMO) the *like classes capture the aspects of foo and Foo that
> are the same, leaving the foo and Foo classes to capture the
> differences.

This is an interesting concept.  We can have Intlike and Numlike
abstract class that Int and Num concretify :).  Then anything can
derive from Intlike and Numlike and be substituted where they are
expected everywhere.

But this will be a common enough operation (behaving like a superclass
but not actually being one) that there might as well be more intrinsic
support for it:

    class myInt is interfaced(Int) {...}

myInt must override all of Int's methods, and it inherits none of its
data.  It might even register in the inheritance heirarchy.  I don't
have enough experience with this technique to know whether or not it
should.

That would be a neat way to do interfaces:  allow a concrete type to
act as an interface.  It would also be a neat way to do Scalar.

Hmmm....

Luke

Reply via email to