docs: function readValue(type, tap, resolver, lazy) {
    if (resolver) {
      if (resolver._readerType !== type) {
        throw new Error('invalid resolver');
      }
      return resolver._read(tap, lazy);
    } else {
      return type._read(tap);
    }
  }