Skip to content

Instantly share code, notes, and snippets.

@IanWold
Last active April 20, 2016 17:44
Show Gist options
  • Save IanWold/a1041c199f81a36e3c9f847b8192e0b5 to your computer and use it in GitHub Desktop.
Save IanWold/a1041c199f81a36e3c9f847b8192e0b5 to your computer and use it in GitHub Desktop.
//in Parse.cs
public static Parser<U> EnumerateInput<T, U>(IEnumerable<T> input, Func<T, Parser<U>> parser)
{
if (input == null) throw new ArgumentNullException("input");
if (parser == null) throw new ArgumentNullException("parser");
return EnumerateInput(input.ToArray(), parser);
}
public static Parser<U> EnumerateInput<T, U>(T[] input, Func<T, Parser<U>> parser)
{
if (input == null || input.Length == 0) throw new ArgumentNullException("input");
if (parser == null) throw new ArgumentNullException("parser");
return i =>
{
var res = (IResult<U>)(new Result<U>(null, null, null));
foreach (var inp in input)
{
res = parser(inp)(i);
if (res.WasSuccessful) return res;
}
return res;
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment