using CanonSharp.Combinator.Abstractions; namespace CanonSharp.Combinator.Parsers.Modifiers; /// /// 成功映射的解析器 /// /// 上游解析器 /// 当上游成功时的处理函数 /// 当上游失败时的处理函数 /// 输入流类型 /// 上游解析器解析结果类型 /// 最终的解析结果类型 internal sealed class SuccessfulMapParser( IParser parser, Func successfulHandler, Func, T> failedHandler) : ModifiedParser(parser) { protected override IParseResult Succeed(TState state, ISuccessfulResult successfulResult) => successfulResult.Map(successfulHandler); protected override IParseResult Fail(TState state, IFailedResult failedResult) => ParseResultBuilder.Succeed(failedHandler(failedResult), state); }