code: function node (type, pattern, val, children) {
      var ret = { pattern: pattern, type: type };
      if (val !== undefined) ret.value = val;
      if (children !== undefined) ret.children = children;
      return ret;
    }
docs: Nodes are comprised of a type, a normalized pattern, and optionally a value and/or children. The `children` attribute is always used for child patterns even if there is no `value`. The `value` attribute is always used for simple values (like for booleans or numbers), never for patterns.