docs: function Rule(lhs, rhs, valuator) {
    let arr = [];
  
    if (!rhs || rhs.length === 0) {
      throw new Error('Rule does not produce anything');
    }
    arr.push.apply(arr, rhs);
    arr.lhs = lhs;
  
    Object.defineProperty(arr, 'lhs', { value: lhs });
    Object.defineProperty(arr, 'evaluate', {
      value: (values) => (valuator) ? valuator.apply(null, values) : null
    });
  
    arr.__proto__ = Rule.prototype;
  
    return arr;
  }