namespace CanonSharp.Combinator.Abstractions; /// /// 解析器结果 /// /// 输入流类型 /// 实际结果类型 public abstract class ParseResult { /// /// 实际结果对象 /// public abstract T Value { get; } protected ParseResult() { } /// /// 在当前结果上应用下一个解析器 /// /// 下一个解析器的函数 /// 处理解析结果的后继函数 /// 下一个解析器函数返回的解析结果类型 /// 最终的解析结果类型 /// internal abstract ParseResult Next(Func> nextParser, Func, ParseResult> continuation); /// /// 映射结果 /// /// 映射结果的函数 /// 映射结果函数返回解析结果的类型 /// 最终的解析结果 public abstract ParseResult Map(Func map); /// /// 在成功或者失败解析结果上应用不同的后继函数 /// /// 在成功解析结果上应用的函数 /// 在失败解析结构上应用的函数 /// 最后返回解析结果的类型 /// 最后的解析结果 public abstract TResult CaseOf(Func, TResult> successfulHandler, Func, TResult> failedHandler); }