添加Nullable转为Option的扩展
This commit is contained in:
parent
5e8849133f
commit
01633d1c4c
|
@ -0,0 +1,12 @@
|
||||||
|
using Sanchime.Functional.Core.Products;
|
||||||
|
|
||||||
|
namespace Sanchime.Functional.Core.Extensions;
|
||||||
|
|
||||||
|
public static class NullableExtension
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 将<see cref="Nullable"/>值转换为<see cref="Option"/>
|
||||||
|
/// </summary>
|
||||||
|
public static Option<T> ToOption<T>(this Nullable<T> @this) where T : struct
|
||||||
|
=> @this.HasValue ? Option.Some(@this.Value) : Option.None;
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
namespace Sanchime.Functional.Core.Products;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 应用函子
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TCategory"></typeparam>
|
||||||
|
public interface IApplicative<TCategory> : IFunctor<TCategory>
|
||||||
|
{
|
||||||
|
}
|
|
@ -7,5 +7,15 @@ namespace Sanchime.Functional.Core.Products;
|
||||||
/// <typeparam name="TCategory"></typeparam>
|
/// <typeparam name="TCategory"></typeparam>
|
||||||
public interface IFunctor<TCategory> : ICategory
|
public interface IFunctor<TCategory> : ICategory
|
||||||
{
|
{
|
||||||
IFunctor<TResult> Map<TResult>(Func<TCategory, IFunctor<TResult>> mapping);
|
TCategory Map(Func<TCategory, TCategory> mapping);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public struct Test<T> : IFunctor<Test<T>>
|
||||||
|
{
|
||||||
|
public T? Value {get; set; }
|
||||||
|
public Test<T> Map(Func<Test<T>, Test<T>> mapping)
|
||||||
|
{
|
||||||
|
return mapping(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
namespace Sanchime.Functional.Core.Products;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 单子
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TCategory"></typeparam>
|
||||||
|
public interface IMonad<TCategory> : IApplicative<TCategory>
|
||||||
|
{
|
||||||
|
}
|
|
@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sanchime.Test", "Sanchime.T
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sanchime.Functional", "Sanchime.Functional\Sanchime.Functional.csproj", "{DF48AFE2-CD1B-4BCE-83EF-DA8BDA104069}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sanchime.Functional", "Sanchime.Functional\Sanchime.Functional.csproj", "{DF48AFE2-CD1B-4BCE-83EF-DA8BDA104069}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sanchime.Toolkits", "Sanchime.Toolkits\Sanchime.Toolkits.csproj", "{3A94EB2F-04F1-46F8-ADD8-DE091402635F}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -24,5 +26,9 @@ Global
|
||||||
{DF48AFE2-CD1B-4BCE-83EF-DA8BDA104069}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{DF48AFE2-CD1B-4BCE-83EF-DA8BDA104069}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{DF48AFE2-CD1B-4BCE-83EF-DA8BDA104069}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{DF48AFE2-CD1B-4BCE-83EF-DA8BDA104069}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{DF48AFE2-CD1B-4BCE-83EF-DA8BDA104069}.Release|Any CPU.Build.0 = Release|Any CPU
|
{DF48AFE2-CD1B-4BCE-83EF-DA8BDA104069}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3A94EB2F-04F1-46F8-ADD8-DE091402635F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3A94EB2F-04F1-46F8-ADD8-DE091402635F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3A94EB2F-04F1-46F8-ADD8-DE091402635F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3A94EB2F-04F1-46F8-ADD8-DE091402635F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
Loading…
Reference in New Issue