code: public static <T> Parser<List<T>> list(Iterable<? extends Parser<? extends T>> parsers) {
      final Parser<? extends T>[] array = toArray(parsers);
      return new Parser<List<T>>() {
        @Override boolean apply(ParseContext ctxt) {
          ArrayList<T> list = Lists.arrayList(array.length);
          for (Parser<? extends T> parser : array) {
            if (!parser.apply(ctxt)) return false;
            list.add(parser.getReturn(ctxt));
          }
          ctxt.result = list;
          return true;
        }
        
        @Override public String toString() {
          return "list";
        }
      };
    }
docs: A {@link Parser} that sequentially runs {@code parsers} one by one and collects the return
  values in a {@link List}.