Pidgin

Struct Maybe<T>

Represents a single possibly absent value. Like Nullable but works for reference types as well as value types.

Implements
Inherited Members
Declaration
public readonly struct Maybe<T> : IEquatable<Maybe<T>>
Type Parameters
Name Description

T

The type of the contained value.

Constructors

Maybe(T)

Create a Maybe<T> containing a value.

Declaration
public Maybe(T value)
Parameters
Type Name Description

T

value

The value.

Properties

HasValue

Does the Maybe<T> contain a value?.

Declaration
public bool HasValue { get; }
Property Value
Type Description

bool

True if and only if the Maybe<T> contains a value.

Value

Get the value from the Maybe<T>, throwing InvalidOperationException if the value is absent.

Declaration
public T Value { get; }
Property Value
Type Description

T

The value.

Exceptions
Type Condition

InvalidOperationException

Thrown when the Maybe<T> does not contain a value.

Methods

Cast<U>()

Cast the value contained in the Maybe<T> to the specified result type.

Declaration
public Maybe<U> Cast<U>()
Returns
Type Description

Maybe<U>

A Maybe<T> containing this Maybe<T>'s value casted to U, if the HasValue property returns true, or Nothing<T>().

Type Parameters
Name Description

U

The type to cast the contained value to.

Exceptions
Type Condition

InvalidCastException

Thrown when the contained value is not an instance of U.

Equals(Maybe<T>)

Represents a single possibly absent value. Like Nullable but works for reference types as well as value types.

Declaration
public bool Equals(Maybe<T> other)
Parameters
Type Name Description

Maybe<T>

other

Returns
Type Description

bool

Equals(object?)

Represents a single possibly absent value. Like Nullable but works for reference types as well as value types.

Declaration
public override bool Equals(object? obj)
Parameters
Type Name Description

object

obj

Returns
Type Description

bool

Overrides
ValueType.Equals(object)

GetHashCode()

Represents a single possibly absent value. Like Nullable but works for reference types as well as value types.

Declaration
public override int GetHashCode()
Returns
Type Description

int

Overrides
ValueType.GetHashCode()

GetValueOrDefault()

Get the value from the Maybe<T>, or return a default value.

Declaration
public T GetValueOrDefault()
Returns
Type Description

T

The value if HasValue is true, or a default value.

GetValueOrDefault(Func<T>)

Get the value from the Maybe<T>, or return the result of calling value.

Declaration
public T GetValueOrDefault(Func<T> value)
Parameters
Type Name Description

Func<T>

value

A function to call to create a default value, if the Maybe<T> does not contain a value.

Returns
Type Description

T

The value if HasValue is true, or the result of calling value.

GetValueOrDefault(T)

Get the value from the Maybe<T>, or return value.

Declaration
public T GetValueOrDefault(T value)
Parameters
Type Name Description

T

value

The default value to return, if the Maybe<T> does not contain a value.

Returns
Type Description

T

The value if HasValue is true, or value.

Match<U>(Func<T, U>, Func<U>)

Tear down this Maybe<T> using a function for the two possible outcomes. If HasValue is true, just will be called. Otherwise, nothing will be called.

Declaration
public U Match<U>(Func<T, U> just, Func<U> nothing)
Parameters
Type Name Description

Func<T, U>

just

Called when the result has a value.

Func<U>

nothing

Called when the result does not have a value.

Returns
Type Description

U

The result of calling the just or nothing function.

Type Parameters
Name Description

U

The return type.

OfType<U>()

Cast the value contained in the Maybe<T> to the specified result type, or return Nothing<T>() if the contained value is not an instance of U.

Declaration
public Maybe<U> OfType<U>()
Returns
Type Description

Maybe<U>

A Maybe<T> containing this Maybe<T>'s value casted to U, if the HasValue property returns true and the contained value is an instance of U, or Nothing<T>().

Type Parameters
Name Description

U

The type to cast the contained value to.

SelectMany<U>(Func<T, Maybe<U>>)

Projects the element of the Maybe<T> into a possibly-absent value, and flattens the resulting value into a single Maybe<T>.

Declaration
public Maybe<U> SelectMany<U>(Func<T, Maybe<U>> selector)
Parameters
Type Name Description

Func<T, Maybe<U>>

selector

A transformation function to apply to the contained value.

Returns
Type Description

Maybe<U>

The resulting Maybe<T>, or Nothing<T>() if the HasValue property returns false or the selector returns an absent value.

Type Parameters
Name Description

U

The type of the resulting possibly-absent value.

SelectMany<U, R>(Func<T, Maybe<U>>, Func<T, U, R>)

Projects the element of the Maybe<T> into a possibly-absent value, and flattens the resulting value into a single Maybe<T>, applying a result selector function to the two values.

Declaration
public Maybe<R> SelectMany<U, R>(Func<T, Maybe<U>> selector, Func<T, U, R> result)
Parameters
Type Name Description

Func<T, Maybe<U>>

selector

A transformation function to apply to the contained value.

Func<T, U, R>

result

A transformation function to apply to the contained value and the value contained in the selected Maybe<T>.

Returns
Type Description

Maybe<R>

The result of applying selector to the contained value and result to the intermediate values, or Nothing<T>() if the HasValue property returns false or the selector returns an absent value.

Type Parameters
Name Description

U

The type of the value to select.

R

The type of the resulting possibly-absent value.

Select<U>(Func<T, U>)

Project the value contained in the Maybe<T> using the specified transformation function.

Declaration
public Maybe<U> Select<U>(Func<T, U> selector)
Parameters
Type Name Description

Func<T, U>

selector

A transformation function to apply to the contained value.

Returns
Type Description

Maybe<U>

The result of applying the transformation function to the contained value, or Nothing<T>().

Type Parameters
Name Description

U

The type of the resulting value.

Where(Func<T, bool>)

Filter a Maybe<T> according to a predicate.

Declaration
public Maybe<T> Where(Func<T, bool> predicate)
Parameters
Type Name Description

Func<T, bool>

predicate

A predicate to apply to the value contained within the Maybe<T>.

Returns
Type Description

Maybe<T>

A Maybe<T> containing the current Maybe<T>'s Value, if the HasValue property returns true and the value satisfies the predicate, or Nothing<T>().

Operators

operator ==(Maybe<T>, Maybe<T>)

Equality operator.

Declaration
public static bool operator ==(Maybe<T> left, Maybe<T> right)
Parameters
Type Name Description

Maybe<T>

left

The left Expected<TToken>.

Maybe<T>

right

The right Expected<TToken>.

Returns
Type Description

bool

operator !=(Maybe<T>, Maybe<T>)

Inequality operator.

Declaration
public static bool operator !=(Maybe<T> left, Maybe<T> right)
Parameters
Type Name Description

Maybe<T>

left

The left Expected<TToken>.

Maybe<T>

right

The right Expected<TToken>.

Returns
Type Description

bool

Implements

IEquatable<T>