You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel/Services/Extensions/Monades.cs

84 lines
2.2 KiB

using System;
namespace ZeroLevel
{
public static class Monades
{
#region With
public static TResult With<TInput, TResult>(this TInput o, Func<TInput, TResult> evaluator)
{
if (null != o) return evaluator(o);
return default(TResult);
}
#endregion With
#region Return
public static TResult Return<TInput, TResult>(this TInput o, Func<TInput, TResult> evaluator, TResult failureValue)
{
if (null != o) return evaluator(o);
return failureValue;
}
public static TResult Return<TInput, TResult>(this TInput o, Func<TInput, TResult> evaluator)
{
if (null != o) return evaluator(o);
return default(TResult);
}
#endregion Return
#region IsNotNull
public static bool IsNotNull<TInput>(this TInput o)
{
if (null != o) return true;
return false;
}
#endregion IsNotNull
#region If
public static TInput If<TInput>(this TInput o, Predicate<TInput> evaluator)
{
if (null != o) return evaluator(o) ? o : default(TInput);
return default(TInput);
}
public static TOutput Either<TInput, TOutput>(this TInput o, Func<TInput, bool> condition,
Func<TInput, TOutput> ifTrue, Func<TInput, TOutput> ifFalse)
=> condition(o) ? ifTrue(o) : ifFalse(o);
public static TOutput Either<TInput, TOutput>(this TInput o, Func<TInput, TOutput> ifTrue,
Func<TInput, TOutput> ifFalse)
=> o.Either(x => x != null, ifTrue, ifFalse);
#endregion If
#region Do
public static TInput Do<TInput>(this TInput o, Action<TInput> action)
{
if (null != o) action(o);
return o;
}
public static TInput Do<TInput>(this TInput o, Action<TInput> action, Action nullHandler)
{
if (null != o)
{
action(o);
}
else
{
nullHandler();
}
return o;
}
#endregion Do
}
}

Powered by TurnKey Linux.