public static Parser <T> Where <T>(this Parser <T> self, Func <T, bool> pred) => inp => self(inp).Match( EmptyOK: (x, rem, msg) => pred(x) ? EmptyOK(x, rem, msg) : EmptyError <T>(ParserError.SysUnexpect(inp.Pos, $"\"{x}\"")), EmptyError: EmptyError <T>, ConsumedOK: (x, rem, msg) => pred(x) ? ConsumedOK(x, rem, msg) : EmptyError <T>(ParserError.SysUnexpect(inp.Pos, $"\"{x}\"")), ConsumedError: ConsumedError <T>);
public static Parser <I, O> Where <I, O>(this Parser <I, O> self, Func <O, bool> pred) => inp => self(inp).Match( EmptyOK: (x, rem, msg) => pred(x) ? EmptyOK(x, rem, msg) : EmptyError <I, O>(ParserError.SysUnexpect(inp.Pos, $"\"{x}\""), inp.TokenPos), EmptyError: msg => EmptyError <I, O>(msg, inp.TokenPos), ConsumedOK: (x, rem, msg) => pred(x) ? ConsumedOK(x, rem, msg) : EmptyError <I, O>(ParserError.SysUnexpect(inp.Pos, $"\"{x}\""), inp.TokenPos), ConsumedError: msg => ConsumedError <I, O>(msg, inp.TokenPos));