/// <summary>
 /// Returns a list of results from the given parser separated by a separator
 /// pattern. Continues until the item or separator pattern return failure, or
 /// the minimum/maximum counts are not satisfied. Returns an enumeration of results.
 /// </summary>
 /// <typeparam name="TInput"></typeparam>
 /// <typeparam name="TSeparator"></typeparam>
 /// <typeparam name="TOutput"></typeparam>
 /// <param name="p"></param>
 /// <param name="separator"></param>
 /// <param name="minimum"></param>
 /// <param name="maximum"></param>
 /// <returns></returns>
 public static IParser <TInput, IReadOnlyList <TOutput> > ListSeparatedBy <TInput, TSeparator, TOutput>(this IParser <TInput, TOutput> p, IParser <TInput, TSeparator> separator, int minimum = 0, int?maximum = null)
 => ParserMethods <TInput> .SeparatedList(p, separator, minimum, maximum);
 /// <summary>
 /// Returns a list of results from the given parser separated by a separator pattern. Continues until
 /// the item or separator parser return failure. Returns an enumerable of results.
 /// </summary>
 /// <typeparam name="TInput"></typeparam>
 /// <typeparam name="TSeparator"></typeparam>
 /// <typeparam name="TOutput"></typeparam>
 /// <param name="p"></param>
 /// <param name="separator"></param>
 /// <param name="atLeastOne"></param>
 /// <returns></returns>
 public static IParser <TInput, IReadOnlyList <TOutput> > ListSeparatedBy <TInput, TSeparator, TOutput>(this IParser <TInput, TOutput> p, IParser <TInput, TSeparator> separator, bool atLeastOne)
 => ParserMethods <TInput> .SeparatedList(p, separator, atLeastOne);