using CanonSharp.Combinator.Abstractions; namespace CanonSharp.Combinator.Parsers.Bases; /// /// 下一步解析器 /// /// 上游解析器 /// 成功情况下的解析器函数 /// 失败情况下的解析器函数 /// 输入流类型 /// 上游解析器结果类型 /// 最终解析结果类型 internal sealed class NextParser( Parser parser, Func> successfulParser, Func, Parser> failedParser) : Parser { internal override ParseResult Run(TState state, Func, ParseResult> continuation) { return parser.Run(state, result => result.CaseOf( successfulResult => successfulResult.Next(successfulParser, continuation), failedResult => failedParser(failedResult).Run(state, continuation))); } }