export declare abstract class Operator { abstract eval(): V; } export declare class UnaryOperator extends Operator { private _t; private _o; constructor(t: T, o: (t: T) => V); t(): T; eval(): V; } export declare class BinaryOperator extends Operator { private _t1; private _t2; private _c; constructor(t1: T1, t2: T2, c: (t1: T1, t2: T2) => V); t1(): T1; t2(): T2; eval(): V; } export declare class MultiOperator extends Operator { private _ts; private _c; constructor(ts: T[], c: (ts: T[]) => V); ts(): T[]; eval(): V; } export declare enum LogicalOperatorTypes { identity = 0, or = 1, and = 2, not = 3 } export declare type Operand = Operator | boolean; export declare class IdentityOperator extends UnaryOperator { constructor(t: T); } export declare class NotOperator extends UnaryOperator { constructor(t: T); } export declare class AndOperator extends MultiOperator { constructor(ts: T[]); } export declare class OrOperator extends MultiOperator { constructor(ts: T[]); }