// using System.Diagnostics.CodeAnalysis; // using System.Runtime.CompilerServices; // namespace SJK.Functional; // public sealed class None : IOption // { // public static None Of() => new(); // [MethodImpl(MethodImplOptions.AggressiveInlining)] // public TResult Match(Func _, Func onNone) => // onNone(); // [MethodImpl(MethodImplOptions.AggressiveInlining)] // public void Match(Action onSome, Action onNone) => onNone(); // [MethodImpl(MethodImplOptions.AggressiveInlining)] // public IOption Bind(Func> f) => new None(); // [MethodImpl(MethodImplOptions.AggressiveInlining)] // public IOption Map(Func f) => new None(); // [MethodImpl(MethodImplOptions.AggressiveInlining)] // public T Or(T aDefault) => aDefault; // public T Or(Func aDefault)=>aDefault(); // public bool HasValue([NotNullWhen(true)]out T? value) => (value = default) is not null && false; // public bool HasValue() => false; // public override string ToString() // { // return nameof(None); // } // public bool Equals(IOption? other)=> other is None; // }