code: function ask(questions, finish, answers, input, output) {
      finish = finish || function() {};
      input = input || function(cb) {process.stdin.on('data', cb);};
      output = output || function(a) {console.log(a);};
  
      var i = 0;
      var ret = {};
      var e = questions[0];
      var v = match(ops, e);
  
      output(getOutput(e, v));
      input(getInput);
  
      function getOutput(e, v) {
          var o = f.isFunction(v.output)? v.output(e): '';
  
          return e.q + o;
      }
  
      function getInput(t) {
          t = t.trim();
          var r = v.exec(t, e);
  
          if(f.isDefined(r)) {
              ret[e.id] = r;
              i++;
  
              if(i >= questions.length) {
                  // XXX: separate this somehow
                  process.stdin.removeListener('data', getInput);
                  process.stdin.pause();
  
                  finish(ret);
              }
              else {
                  e = questions[i];
                  v = match(ops, e);
                  output(getOutput(e, v));
              }
          }
      }
  }
docs: TODO: hook up predefined answers