@@ -0,0 +1,876 @@
+package xyz.hexav.aje.types;%0A%0Aimport xyz.hexav.aje.AJEException;%0A%0Apublic interface OperableValue%3CT extends OperableValue%3E %7B%0A    static void check(Object a) %7B%0A        if(!(a instanceof OperableValue)) %7B%0A            throw new AJEException(%22This operator requires the value to be operable!%22);%0A        %7D%0A    %7D%0A    static void check(Object a, Object b) %7B%0A        if(!(a instanceof OperableValue %7C%7C b instanceof OperableValue)) %7B%0A            throw new AJEException(%22This operator requires both values to be operable!%22);%0A        %7D%0A    %7D%0A    static %3CT extends OperableValue%3E OperableValue%3CT%3E wrap(T a) %7B%0A        return (OperableValue%3CT%3E) a;%0A    %7D%0A%0A    double value();%0A%0A    // Basic arithmetic%0A    T add(T other);%0A%0A    T subtract(T other);%0A    %0A    T multiply(T other);%0A%0A    T divide(T other);%0A%0A    T mod(T other);%0A%0A    T negative();%0A%0A    // Boolean logic%0A    Truth equals(T other);%0A%7D%0A

Add interface