using CanonSharp.Combinator.Abstractions; namespace CanonSharp.Combinator.Parsers; /// /// 修改解析器返回结果的解析器基类 /// /// 需要修改结果的解析器 /// 输入流类型 /// 需要修改结果的解析器 /// 最终返回的解析结果 public abstract class ModifiedParser(IParser parser) : IParser { protected abstract IParseResult Fail(TState state, IFailedResult failedResult) where TState : IReadState; protected abstract IParseResult Succeed(TState state, ISuccessfulResult successfulResult) where TState : IReadState; public IParseResult Run(TState state, Func, IParseResult> continuation) where TState : IReadState => parser.Run(state, result => result.CaseOf( success => continuation(Succeed(state, success)), failure => continuation(Fail(state, failure)))); }