Table of Contents

Class MaybeExtensions

Namespace
Vonage.Common.Monads
Assembly
Vonage.dll

Exposes a set of extensions for Maybe, including async operations on Task of Maybe.

public static class MaybeExtensions
Inheritance
MaybeExtensions
Inherited Members

Methods

BindAsync<TSource, TDestination>(Task<Maybe<TSource>>, Func<TSource, Task<Maybe<TDestination>>>)

Monadic bind operation with an asynchronous bind function.

public static Task<Maybe<TDestination>> BindAsync<TSource, TDestination>(this Task<Maybe<TSource>> task, Func<TSource, Task<Maybe<TDestination>>> bind)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

bind Func<TSource, Task<Maybe<TDestination>>>

Asynchronous bind operation.

Returns

Task<Maybe<TDestination>>

Bound functor.

Type Parameters

TSource

Source type.

TDestination

Return type.

Examples

Task<Maybe<int>> asyncUserId = GetUserIdAsync();
Maybe<User> user = await asyncUserId.BindAsync(id => FetchUserAsync(id));

Bind<TSource, TDestination>(Task<Maybe<TSource>>, Func<TSource, Maybe<TDestination>>)

Monadic bind operation on an asynchronous Maybe.

public static Task<Maybe<TDestination>> Bind<TSource, TDestination>(this Task<Maybe<TSource>> task, Func<TSource, Maybe<TDestination>> bind)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

bind Func<TSource, Maybe<TDestination>>

Bind operation.

Returns

Task<Maybe<TDestination>>

Bound functor.

Type Parameters

TSource

Source type.

TDestination

Return type.

Examples

Task<Maybe<string>> asyncValue = GetValueAsync();
Maybe<int> result = await asyncValue.Bind(value => ParseInt(value));

DoWhenNone<TSource>(Task<Maybe<TSource>>, Action)

Executes an operation if the asynchronous Maybe is in None state.

public static Task<Maybe<TSource>> DoWhenNone<TSource>(this Task<Maybe<TSource>> task, Action noneOperation)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

noneOperation Action

None operation.

Returns

Task<Maybe<TSource>>

The original Maybe.

Type Parameters

TSource

Source type.

Examples

Task<Maybe<string>> asyncName = GetNameAsync();
await asyncName.DoWhenNone(() => Console.WriteLine("No value found"));

DoWhenSome<TSource>(Task<Maybe<TSource>>, Action<TSource>)

Executes an operation if the asynchronous Maybe is in Some state.

public static Task<Maybe<TSource>> DoWhenSome<TSource>(this Task<Maybe<TSource>> task, Action<TSource> someOperation)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

someOperation Action<TSource>

Some operation.

Returns

Task<Maybe<TSource>>

The original Maybe.

Type Parameters

TSource

Source type.

Examples

Task<Maybe<string>> asyncName = GetNameAsync();
await asyncName.DoWhenSome(name => Console.WriteLine($"Hello, {name}!"));

Do<TSource>(Task<Maybe<TSource>>, Action<TSource>, Action)

Executes operations depending on the current state of an asynchronous Maybe.

public static Task<Maybe<TSource>> Do<TSource>(this Task<Maybe<TSource>> task, Action<TSource> someOperation, Action noneOperation)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

someOperation Action<TSource>

Some operation.

noneOperation Action

None operation.

Returns

Task<Maybe<TSource>>

The original Maybe.

Type Parameters

TSource

Source type.

Examples

Task<Maybe<string>> asyncName = GetNameAsync();
await asyncName.Do(
    someOperation: name => Console.WriteLine($"Found: {name}"),
    noneOperation: () => Console.WriteLine("Not found")
);

FromNonEmptyString(string)

Creates a Maybe from a string value.

public static Maybe<string> FromNonEmptyString(string value)

Parameters

value string

The string value.

Returns

Maybe<string>

A None state if the value is null or whitespace. A Some state otherwise.

Examples

Maybe<string> name = MaybeExtensions.FromNonEmptyString("Alice"); // Some("Alice")
Maybe<string> empty = MaybeExtensions.FromNonEmptyString(""); // None
Maybe<string> whitespace = MaybeExtensions.FromNonEmptyString("   "); // None

IfNone<TSource>(Task<Maybe<TSource>>, TSource)

Returns the specified value if the asynchronous Maybe is in the None state, the Some value otherwise.

public static Task<TSource> IfNone<TSource>(this Task<Maybe<TSource>> task, TSource noneValue)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

noneValue TSource

The value to return if in None state.

Returns

Task<TSource>

A value.

Type Parameters

TSource

Source type.

Examples

Task<Maybe<int>> asyncCount = GetCountAsync();
int count = await asyncCount.IfNone(0); // Returns 0 if None

MapAsync<TSource, TDestination>(Task<Maybe<TSource>>, Func<TSource, Task<TDestination>>)

Projects from one value to another using an asynchronous projection function.

public static Task<Maybe<TDestination>> MapAsync<TSource, TDestination>(this Task<Maybe<TSource>> task, Func<TSource, Task<TDestination>> map)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

map Func<TSource, Task<TDestination>>

Asynchronous projection function.

Returns

Task<Maybe<TDestination>>

Mapped functor.

Type Parameters

TSource

Source type.

TDestination

Resulting functor value type.

Examples

Task<Maybe<int>> asyncId = GetIdAsync();
Maybe<string> name = await asyncId.MapAsync(id => FetchNameAsync(id));

Map<TSource, TDestination>(Task<Maybe<TSource>>, Func<TSource, TDestination>)

Projects from one value to another on an asynchronous Maybe.

public static Task<Maybe<TDestination>> Map<TSource, TDestination>(this Task<Maybe<TSource>> task, Func<TSource, TDestination> map)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

map Func<TSource, TDestination>

Projection function.

Returns

Task<Maybe<TDestination>>

Mapped functor.

Type Parameters

TSource

Source type.

TDestination

Resulting functor value type.

Examples

Task<Maybe<string>> asyncName = GetNameAsync();
Maybe<int> length = await asyncName.Map(name => name.Length);

Match<TSource, TDestination>(Task<Maybe<TSource>>, Func<TSource, TDestination>, Func<TDestination>)

Match the two states of an asynchronous Maybe and return a non-null TDestination.

public static Task<TDestination> Match<TSource, TDestination>(this Task<Maybe<TSource>> task, Func<TSource, TDestination> some, Func<TDestination> none)

Parameters

task Task<Maybe<TSource>>

Asynchronous Maybe.

some Func<TSource, TDestination>

Some match operation.

none Func<TDestination>

None match operation.

Returns

Task<TDestination>

A non-null TDestination.

Type Parameters

TSource

Source type.

TDestination

Return type.

Examples

Task<Maybe<string>> asyncName = GetNameAsync();
string greeting = await asyncName.Match(
    some: name => $"Hello, {name}!",
    none: () => "Hello, stranger!"
);