Hyperlinkv0.8.0-beta.28

Array

Array.partitionconsteffect/Array.ts:3801
<A, Pass, Fail>(
  f: (input: NoInfer<A>, i: number) => Result.Result<Pass, Fail>
): (self: Iterable<A>) => [excluded: Array<Fail>, satisfying: Array<Pass>]
<A, Pass, Fail>(
  self: Iterable<A>,
  f: (input: A, i: number) => Result.Result<Pass, Fail>
): [excluded: Array<Fail>, satisfying: Array<Pass>]

Splits an iterable using a Filter into failures and successes.

When to use

Use to partition an iterable by evaluating each element with a Result-returning filter and keeping both failure and success values.

Details

Returns [excluded, satisfying]. The filter receives (element, index).

Example (Partitioning with a filter)

import { Array, Result } from "effect"

console.log(Array.partition([1, -2, 3], (n, i) =>
  n > 0 ? Result.succeed(n + i) : Result.fail(`negative:${n}`)
))
// [["negative:-2"], [1, 5]]
Source effect/Array.ts:380128 lines
export const partition: {
  <A, Pass, Fail>(
    f: (input: NoInfer<A>, i: number) => Result.Result<Pass, Fail>
  ): (self: Iterable<A>) => [excluded: Array<Fail>, satisfying: Array<Pass>]
  <A, Pass, Fail>(
    self: Iterable<A>,
    f: (input: A, i: number) => Result.Result<Pass, Fail>
  ): [excluded: Array<Fail>, satisfying: Array<Pass>]
} = dual(
  2,
  <A, Pass, Fail>(
    self: Iterable<A>,
    f: (input: A, i: number) => Result.Result<Pass, Fail>
  ): [excluded: Array<Fail>, satisfying: Array<Pass>] => {
    const excluded: Array<Fail> = []
    const satisfying: Array<Pass> = []
    let i = 0
    for (const a of self) {
      const result = f(a, i++)
      if (Result.isSuccess(result)) {
        satisfying.push(result.success)
      } else {
        excluded.push(result.failure)
      }
    }
    return [excluded, satisfying]
  }
)
Referenced by 2 symbols