namespace CanonSharp.Combinator.Abstractions; /// /// 成功解析结果基类 /// /// 实际的解析结果 /// 输入流类型 /// 实际的解析结果类型 public abstract class SuccessfulResult(T value) : ParseResult { public override T Value => value; /// /// 运行下一个解析器 /// /// 下一个解析器 /// 处理解析结果的后继函数 /// 下一个解析器返回的结果类型 /// 最终的结果类型 /// 最终的结果 protected abstract ParseResult RunNext(Parser parser, Func, ParseResult> continuation); internal override ParseResult Next(Func> nextParser, Func, ParseResult> continuation) => RunNext(nextParser(Value), continuation); public override TResult CaseOf(Func, TResult> successfulHandler, Func, TResult> failedHandler) => successfulHandler(this); public override string ToString() => Value?.ToString() ?? string.Empty; }