interpreter/index.js
function Interpreter(library, options, storage) {
    // What lengths I've gone to to use only 7-letter properties...
    this.library = new Library(CloneDeep(library || {}));
    this.options = Assign({}, Interpreter.DEFAULT_OPTIONS, options);
    this.balance = this.options.balance;
    this.timeout = Date.now() + this.options.timeout;
    this.seednum = this.options.seed || Math.random();
    this.counter = this.options.count || 0;
    this.storage = storage || new Storage();

    var outputs = this.outputs = [];
    if (this.options.doCaptureConsole) {
        Console.capture(function(type, messages) {
            outputs.push({ type: type, messages: messages });
        });
    }
}
function Interpreter(library, options, storage) {
    // What lengths I've gone to to use only 7-letter properties...
    this.library = new Library(CloneDeep(library || {}));
    this.options = Assign({}, Interpreter.DEFAULT_OPTIONS, options);
    this.balance = this.options.balance;
    this.timeout = Date.now() + this.options.timeout;
    this.seednum = this.options.seed || Math.random();
    this.counter = this.options.count || 0;
    this.storage = storage || new Storage();

    var outputs = this.outputs = [];
    if (this.options.doCaptureConsole) {
        Console.capture(function(type, messages) {
            outputs.push({ type: type, messages: messages });
        });
    }
}
function Interpreter ( library , options , storage ) { // What lengths I've gone to to use only 7-letter properties... this . library = new Library ( CloneDeep ( library || { } ) ) ; this . options = Assign ( { } , Interpreter . DEFAULT_OPTIONS , options ) ; this . balance = this . options . balance ; this . timeout = Date . now ( ) + this . options . timeout ; this . seednum = this . options . seed || Math . random ( ) ; this . counter = this . options . count || 0 ; this . storage = storage || new Storage ( ) ; var outputs = this . outputs = [ ] ; if ( this . options . doCaptureConsole ) { Console . capture ( function ( type , messages ) { outputs . push ( { type : type , messages : messages } ) ; } ) ; } }
An instance of Interpreter can execute a Runiq AST. At a high level,
it performs instructions defined in the AST by mapping function
names to function entries in the passed-in Library instance

The interpreter also manages ordering operations in accordance with
the three basic control patterns available in Runiq:
- Asynchronous function composition, via nesting:
['last', ['third', ['second', ['first']]]]
- asynchronous function sequencing
[['first'],['second'],['third'],['last']]
- quoting (witholding lists for later execution)
['quote', ['save', 'me', 'for', 'later']]

@class Interpreter
@constructor
@param [library] {Object} - Library dictionary
@param [options] {Object} - Options object
An instance of Interpreter can execute a Runiq AST . At a high level it performs instructions defined in the AST by mapping function names to function entries in the passed - in Library instance