using CanonSharp.Combinator.Abstractions;
namespace CanonSharp.Combinator.Parsers.Bases;
///
/// 恢复解析器
/// 在上游解析器失败的情况下调用指定恢复函数返回的解析器
///
/// 上游解析器
/// 返回新解析器的恢复函数
/// 输入令牌类型
/// 解析结果类型
internal sealed class ResumeParser(
Parser parser,
Func, Parser> failedHandler) : Parser
{
internal override ParseResult Run(TState state,
Func, ParseResult> continuation)
{
return parser.Run(state,
result => result.CaseOf(continuation,
failedResult => failedHandler(failedResult).Run(state, continuation)));
}
}