namespace CanonSharp.Combinator.Abstractions;
///
/// 失败解析结果基类
///
/// 输入流类型
/// 解析结果类型
public abstract class FailedResult : ParseResult
{
public override T Value => throw Exception;
///
/// 当前读取到的状态
///
public abstract IReadState State { get; }
///
/// 解析失败的消息
///
public abstract string Message { get; }
///
/// 解析失败的异常
///
public virtual ParseException Exception => new(ToString());
///
/// 转换该失败结果的类型
///
/// 转换之后的结果类型
/// 转换之后的失败解析类型
public abstract FailedResult Convert();
internal override ParseResult Next(Func> nextParser,
Func, ParseResult> continuation)
=> continuation(Convert());
public override ParseResult Map(Func map)
=> Convert();
public override TResult CaseOf(Func, TResult> successfulHandler,
Func, TResult> failedHandler)
=> failedHandler(this);
public override string ToString()
{
return $"Parse Failed: {Message}.";
}
}