Pidgin

Class Maybe<T>

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

Inheritance
Implements
Declaration
public sealed class Maybe<T> : ValueType, 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

Boolean

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>)

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

Maybe<T>

other

Returns
Type Description

Boolean

Equals(Object)

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

Object

other

Returns
Type Description

Boolean

GetHashCode()

Declaration
public override int GetHashCode()
Returns
Type Description

Int32

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(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.

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.

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

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

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

Where(Func<T, Boolean>)

Filter a Maybe<T> according to a predicate.

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

Func<T, Boolean>

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

Equality(Maybe<T>, Maybe<T>)

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

Maybe<T>

left

Maybe<T>

right

Returns
Type Description

Boolean

Inequality(Maybe<T>, Maybe<T>)

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

Maybe<T>

left

Maybe<T>

right

Returns
Type Description

Boolean

Implements

System.IEquatable<T>