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)));
}
}