Refactored Option<T> to have opertator lifting and removed ref struct for now.
All checks were successful
Build NuGet / build (push) Successful in 1m43s

This commit is contained in:
2026-08-07 12:58:11 -04:00
parent 1d53af4b46
commit 262b76c4d5
13 changed files with 1123 additions and 262 deletions

View File

@@ -1,31 +1,31 @@
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
// using System.Diagnostics.CodeAnalysis;
// using System.Runtime.CompilerServices;
namespace SJK.Functional;
// namespace SJK.Functional;
public sealed class None<T> : IOption<T>
{
// public sealed class None<T> : IOption<T>
// {
public static None<T> Of() => new();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Match<TResult>(Func<T, TResult> _, Func<TResult> onNone) =>
onNone();
// public static None<T> Of() => new();
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
// public TResult Match<TResult>(Func<T, TResult> _, Func<TResult> onNone) =>
// onNone();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Match(Action<T> onSome, Action onNone) => onNone();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public IOption<TResult> Bind<TResult>(Func<T, IOption<TResult>> f) => new None<TResult>();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public IOption<TResult> Map<TResult>(Func<T, TResult> f) => new None<TResult>();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public T Or(T aDefault) => aDefault;
public T Or(Func<T> 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<T>);
}
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
// public void Match(Action<T> onSome, Action onNone) => onNone();
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
// public IOption<TResult> Bind<TResult>(Func<T, IOption<TResult>> f) => new None<TResult>();
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
// public IOption<TResult> Map<TResult>(Func<T, TResult> f) => new None<TResult>();
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
// public T Or(T aDefault) => aDefault;
// public T Or(Func<T> 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<T>);
// }
public bool Equals(IOption<T>? other)=> other is None<T>;
}
// public bool Equals(IOption<T>? other)=> other is None<T>;
// }