Hyperlinkv0.8.0-beta.28

Order

Order.combineAllfunctioneffect/Order.ts:399
<A>(collection: Iterable<Order<A>>): Order<A>

Combines all Order instances in the provided collection into a single Order. The resulting Order compares using each Order in sequence until a non-zero result is found.

When to use

Use when you need tie-breaking across a variable number of orders.

Details

Applies orders in iteration order and short-circuits on the first non-zero result. It returns 0 only if all orders return 0.

Example (Combining multiple Orders)

import { Order } from "effect"

const byAge = Order.mapInput(
  Order.Number,
  (person: { name: string; age: number }) => person.age
)
const byName = Order.mapInput(
  Order.String,
  (person: { name: string; age: number }) => person.name
)

const combinedOrder = Order.combineAll([byAge, byName])

const person1 = { name: "Alice", age: 30 }
const person2 = { name: "Bob", age: 30 }

console.log(combinedOrder(person1, person2)) // -1 (Same age, Alice < Bob)
Source effect/Order.ts:39912 lines
export function combineAll<A>(collection: Iterable<Order<A>>): Order<A> {
  return make((a1, a2) => {
    let out: Ordering = 0
    for (const O of collection) {
      out = O(a1, a2)
      if (out !== 0) {
        return out
      }
    }
    return out
  })
}
Referenced by 2 symbols