Skip to content

Commit bedb2de

Browse files
committed
Added default implementations to simplify consuming by the users
1 parent 34d9636 commit bedb2de

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

src/DotNext/IOptionMonad.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,25 @@ public interface IOptionMonad<T> : ISupplier<object?>
2828
/// </summary>
2929
/// <param name="defaultValue">The value to be returned if there is no value present.</param>
3030
/// <returns>The value, if present, otherwise <paramref name="defaultValue"/>.</returns>
31-
T? Or(T? defaultValue);
31+
T? Or(T? defaultValue) => HasValue ? ValueOrDefault : defaultValue;
3232

3333
/// <summary>
3434
/// Returns the value if present; otherwise invoke delegate.
3535
/// </summary>
3636
/// <param name="defaultFunc">A delegate to be invoked if value is not present.</param>
3737
/// <returns>The value, if present, otherwise returned from delegate.</returns>
38-
T OrInvoke(Func<T> defaultFunc);
38+
T OrInvoke(Func<T> defaultFunc) => HasValue ? ValueOrDefault! : defaultFunc();
3939

4040
/// <summary>
4141
/// Attempts to extract value from container if it is present.
4242
/// </summary>
4343
/// <param name="value">Extracted value.</param>
4444
/// <returns><see langword="true"/> if value is present; otherwise, <see langword="false"/>.</returns>
45-
bool TryGet(out T? value);
45+
bool TryGet(out T? value)
46+
{
47+
value = ValueOrDefault;
48+
return HasValue;
49+
}
4650
}
4751

4852
/// <summary>

src/DotNext/IResultMonad.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public interface IResultMonad<T, out TError> : IOptionMonad<T>
1818
/// </summary>
1919
/// <param name="defaultFunc">A delegate to be invoked if value is not present.</param>
2020
/// <returns>The value, if present, otherwise returned from delegate.</returns>
21-
T OrInvoke(Func<TError, T> defaultFunc);
21+
T OrInvoke(Func<TError, T> defaultFunc) => HasValue ? ValueOrDefault! : defaultFunc(Error!);
2222
}
2323

2424
/// <summary>
@@ -44,5 +44,5 @@ public interface IResultMonad<T, TError, TSelf> : IResultMonad<T, TError>, IOpti
4444
/// <param name="result">The result to be converted.</param>
4545
/// <returns>The converted result.</returns>
4646
public static virtual implicit operator Optional<T>(in TSelf result)
47-
=> new(result.ValueOrDefault);
47+
=> result.HasValue ? result.ValueOrDefault : Optional<T>.None;
4848
}

0 commit comments

Comments
 (0)