public virtual bool OnUnknown(OnUnknownCallback callback)
 {
     return(false);
 }
 public abstract TMatch Match <TMatch>(OnPositiveCallback <TMatch> positive, OnNegativeCallback <TMatch> negative, OnUnknownCallback <TMatch> unknown);
 public abstract void Match(OnPositiveCallback positive, OnNegativeCallback negative, OnUnknownCallback unknown);
 public override bool OnUnknown(OnUnknownCallback callback)
 {
     callback(this);
     return(false);
 }
 public override TMatch Match <TMatch>(OnPositiveCallback <TMatch> positive, OnNegativeCallback <TMatch> negative, OnUnknownCallback <TMatch> unknown)
 {
     return(unknown(this));
 }
 public override void Match(OnPositiveCallback positive, OnNegativeCallback negative, OnUnknownCallback unknown)
 {
     unknown(this);
 }