@:from interface

Hello!

I’m playing around with Haxe abstracts and am having a lot of fun with them. However, they don’t play nice with interfaces, or maybe i’m just not getting it!

Here is some example code. The @:from implicit cast does not play well with interfaces. c_loveshaxe will not compile!? Is there anything I can do to make it compile?

I’m using Haxe/HL but I’m assuming that it’s a generic thing.

Many thanks for any help on this.

// an interface
interface LovesHaxe {
    public var a: Int;
}

// a test class
class Test implements LovesHaxe {
    public var a: Int = 0;

    public function new(a: Int = 0) {
        this.a = a;
    }
}

// abstract implementation
class ContainerImpl<T> {
    public var value(default, null): Null<T>;

    public function new(value: Null<T> = null) {
        set(value);
    }

    public function set(value: Null<T>) {
        this.value = value;
    }
}

// our abstract
@:forward
abstract Container<T>(ContainerImpl<T>) from ContainerImpl<T> {

    public inline function new(value: Null<T> = null) {
        this = new ContainerImpl<T>(value);
    }

    @:from static function fromT<T>(value: Null<T>): Container<T> {
        return new Container(value);
    }
}

class SomeClass {
    public static function main() {
        var c_int: Container<Int> = 10;                         // good
        var c_test: Container<Test> = new Test(10);             // good!
        var c_loveshaxe: Container<LovesHaxe> = new Test(10);   // bad! Container dos not love haxe!
    }
}