module modules.types;


struct String {
    string value;
}


enum Enum {
    foo,
    bar,
    baz,
}

class Class {
    int i;
    this(int i) { this.i = i; }
}


interface Interface {
    int foo(double d, string s);
}

class AbstractClass {
    abstract double bar(int i);
}

class MiddleClass: AbstractClass {
    string baz(string s);
}

class LeafClass: MiddleClass, Interface {
    override int foo(double d, string s) {
        return 42;
    }

    override double bar(int i) {
        return i * 2;
    }

    override string baz(string s) {
        return s ~ "_baz";
    }
}