namespace CanonSharp.Combinator.Abstractions;
/// 
/// 成功解析结果基类
/// 
/// 输入流类型
/// 实际的解析结果类型
public interface ISuccessfulResult : IParseResult
{
    /// 
    /// 运行下一个解析器
    /// 
    /// 下一个解析器
    /// 处理解析结果的后继函数
    /// 下一个解析器返回的结果类型
    /// 最终的结果类型
    /// 最终的结果
    protected IParseResult RunNext(IParser parser,
        Func, IParseResult> continuation);
    IParseResult IParseResult.Next(
        Func> nextParser,
        Func, IParseResult> continuation)
        => RunNext(nextParser(Value), continuation);
    TResult IParseResult.CaseOf(Func, TResult> successfulHandler,
        Func, TResult> failedHandler)
        => successfulHandler(this);
}