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;
}