public static Maybe <T[]> List <T>(this TextParser p, ReadOnlySpan <char> separator, Func <TextParser, Maybe <T> > itemParser) { List <T> items = new List <T>(); if (p.Match("none")) { return(new Maybe <T[]>(new T[0])); } while (!p.EOF) { Maybe <TextParser> span = p.Before(separator); if (span) { p.Seek(separator.Length); } var item = itemParser(span ? span : p); if (!item) { return(item.Convert <T[]>()); } items.Add(item.Value); if (!span) { break; } } return(new Maybe <T[]>(items.ToArray())); }