docs: function eachLine(file, lineProcessFn, finallyFn, options) {
    if (arguments.length === 2) {
      if (_.isFunction(lineProcessFn)) {
        finallyFn = null;
        options = {};
      } else {
        options = lineProcessFn;
        lineProcessFn = null;
      }
    } else if (arguments.length === 3) {
      if (_.isFunction(finallyFn)) {
        options = {};
      } else {
        finallyFn = null;
        options = finallyFn;
      }
    }
    options = _.sanitize(options, {reverse: false, eachLine: null, finally: null, encoding: 'utf-8'});
    finallyFn = finallyFn || options.finally;
    lineProcessFn = lineProcessFn || options.eachLine;
  
    const data = read(file, _.pick(options, 'encoding'));
    const lines = data.split('\n');
    if (options.reverse) lines.reverse();
  
    const newLines = [];
    _.each(lines, (line, index) => {
      const res = lineProcessFn(line, index);
      newLines.push(res);
      // Returning false from lineProcessFn will allow us early aborting the loop
      return res;
    });
    if (options.reverse) newLines.reverse();
    if (finallyFn !== null) finallyFn(newLines.join('\n'));
  }