JSON
    Andrei Alexandrescu 
    SeeWebsiteForEmail at erdani.org
       
    Wed Dec 15 10:11:37 PST 2010
    
    
  
On 12/15/10 11:49 AM, Robert Jacques wrote:
[JSON]
Apologies for not making the time to review this; I'm very interested in 
the topic but I have 121 emails waiting for attention in my inbox, and 
each requires a fair amount of work.
> Notes:
> * Does anyone have a suggestion of a good way to attach methods to an
> Algebraic type? And if we can, should we?
This is a very good challenge. Ideally Algebraic would define a method 
if and only if all of its possible types define a method with (a) same 
name, (b) covariant return types (i.e. return types have a CommonType), 
(c) contravariant parameter types (we don't have ContravariantCommonType 
in std.traits, but it should be doable). Consider:
class Widget {
     long foo(int);
}
class Gadget {
     int foo(long);
}
auto a = Algebraic!(Widget, Gadget)(new Widget);
long x = a.foo(42); // should work
x = a.foo(x); // shouldn't compile
That would be awes, and is in fact implementing an optimization called 
type casing.
Andrei
    
    
More information about the Digitalmars-d
mailing list