package org.uva.sea.ql.interpreter.value;
import org.uva.sea.ql.ast.type.Type;
public abstract class Num<T> extends Value<T> {
public abstract Value<?> parse(Type type);
protected abstract Value<?> parse(Int value);
protected abstract Value<?> parse(Undefined value);
public abstract Value<?> add(Value<?> value);
public abstract Value<?> sub(Value<?> value);
public abstract Value<?> mul(Value<?> value);
public abstract Value<?> div(Value<?> value);
public abstract Value<?> pos();
public abstract Value<?> neg();
public abstract Value<?> lt(Value<?> value);
public abstract Value<?> leq(Value<?> value);
public abstract Value<?> gt(Value<?> value);
public abstract Value<?> geq(Value<?> value);
public abstract Value<?> eq(Value<?> value);
public abstract Value<?> neq(Value<?> value);
protected abstract Value<?> intAdd(Int leftValue);
protected abstract Value<?> intSub(Int leftValue);
protected abstract Value<?> intMul(Int leftValue);
protected abstract Value<?> intDiv(Int leftValue);
protected abstract Value<?> intLt(Int leftValue);
protected abstract Value<?> intLeq(Int leftValue);
protected abstract Value<?> intGt(Int leftValue);
protected abstract Value<?> intGeq(Int leftValue);
protected abstract Value<?> intEq(Int value);
protected abstract Value<?> intNeq(Int value);
}