Skip to content

True Myth / maybe / match

Function: match()

Call Signature

match<T, A>(matcher, maybe): A

Performs the same basic functionality as unwrapOrElse, but instead of simply unwrapping the value if it is Just and applying a value to generate the same default type if it is Nothing, lets you supply functions which may transform the wrapped type if it is Just or get a default value for Nothing.

This is kind of like a poor man's version of pattern matching, which JavaScript currently lacks.

Instead of code like this:

ts
import Maybe from 'true-myth/maybe';

const logValue = (mightBeANumber: Maybe<number>) => {
  const valueToLog = Maybe.mightBeANumber.isJust
    ? mightBeANumber.value.toString()
    : 'Nothing to log.';

  console.log(valueToLog);
};

...we can write code like this:

ts
import { match } from 'true-myth/maybe';

const logValue = (mightBeANumber: Maybe<number>) => {
  const value = match(
    {
      Just: n => n.toString(),
      Nothing: () => 'Nothing to log.',
    },
    mightBeANumber
  );

  console.log(value);
};

This is slightly longer to write, but clearer: the more complex the resulting expression, the hairer it is to understand the ternary. Thus, this is especially convenient for times when there is a complex result, e.g. when rendering part of a React component inline in JSX/TSX.

Type Parameters

T

T

A

A

Parameters

matcher

Matcher<T, A>

A lightweight object defining what to do in the case of each variant.

maybe

Maybe<T>

The maybe instance to check.

Returns

A

Call Signature

match<T, A>(matcher): (m) => A

Performs the same basic functionality as unwrapOrElse, but instead of simply unwrapping the value if it is Just and applying a value to generate the same default type if it is Nothing, lets you supply functions which may transform the wrapped type if it is Just or get a default value for Nothing.

This is kind of like a poor man's version of pattern matching, which JavaScript currently lacks.

Instead of code like this:

ts
import Maybe from 'true-myth/maybe';

const logValue = (mightBeANumber: Maybe<number>) => {
  const valueToLog = Maybe.mightBeANumber.isJust
    ? mightBeANumber.value.toString()
    : 'Nothing to log.';

  console.log(valueToLog);
};

...we can write code like this:

ts
import { match } from 'true-myth/maybe';

const logValue = (mightBeANumber: Maybe<number>) => {
  const value = match(
    {
      Just: n => n.toString(),
      Nothing: () => 'Nothing to log.',
    },
    mightBeANumber
  );

  console.log(value);
};

This is slightly longer to write, but clearer: the more complex the resulting expression, the hairer it is to understand the ternary. Thus, this is especially convenient for times when there is a complex result, e.g. when rendering part of a React component inline in JSX/TSX.

Type Parameters

T

T

A

A

Parameters

matcher

Matcher<T, A>

A lightweight object defining what to do in the case of each variant.

Returns

(m): A

Parameters

m

Maybe<T>

Returns

A