Hyperlinkv0.8.0-beta.28

Ordering

Ordering.matchconsteffect/Ordering.ts:124
<A, B, C = B>(options: {
  readonly onLessThan: LazyArg<A>
  readonly onEqual: LazyArg<B>
  readonly onGreaterThan: LazyArg<C>
}): (self: Ordering) => A | B | C
<A, B, C = B>(
  o: Ordering,
  options: {
    readonly onLessThan: LazyArg<A>
    readonly onEqual: LazyArg<B>
    readonly onGreaterThan: LazyArg<C>
  }
): A | B | C

Matches an Ordering value and returns the branch selected by that ordering.

When to use

Use to branch on the three possible comparison outcomes in one expression.

Example (Pattern matching on orderings)

import { Function, Ordering } from "effect"
import * as assert from "node:assert"

const toMessage = Ordering.match({
  onLessThan: Function.constant("less than"),
  onEqual: Function.constant("equal"),
  onGreaterThan: Function.constant("greater than")
})

assert.deepStrictEqual(toMessage(-1), "less than")
assert.deepStrictEqual(toMessage(0), "equal")
assert.deepStrictEqual(toMessage(1), "greater than")
pattern matching
Source effect/Ordering.ts:12424 lines
export const match: {
  <A, B, C = B>(
    options: {
      readonly onLessThan: LazyArg<A>
      readonly onEqual: LazyArg<B>
      readonly onGreaterThan: LazyArg<C>
    }
  ): (self: Ordering) => A | B | C
  <A, B, C = B>(
    o: Ordering,
    options: {
      readonly onLessThan: LazyArg<A>
      readonly onEqual: LazyArg<B>
      readonly onGreaterThan: LazyArg<C>
    }
  ): A | B | C
} = dual(2, <A, B, C = B>(
  self: Ordering,
  { onEqual, onGreaterThan, onLessThan }: {
    readonly onLessThan: LazyArg<A>
    readonly onEqual: LazyArg<B>
    readonly onGreaterThan: LazyArg<C>
  }
): A | B | C => self === -1 ? onLessThan() : self === 0 ? onEqual() : onGreaterThan())