Hyperlinkv0.8.0-beta.28

Array

Array.dropWhileFilterconsteffect/Array.ts:1608
<A, B, X>(f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): (
  self: Iterable<A>
) => Array<A>
<A, B, X>(
  self: Iterable<A>,
  f: (input: A, i: number) => Result.Result<B, X>
): Array<A>

Drops elements from the start while a Filter succeeds.

When to use

Use when you need to drop a prefix from an iterable by computing a Result per element instead of using a simple boolean predicate.

Details

The filter receives (element, index). The result contains the remaining original elements after the first filter failure.

Source effect/Array.ts:160817 lines
export const dropWhileFilter: {
  <A, B, X>(f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): (self: Iterable<A>) => Array<A>
  <A, B, X>(self: Iterable<A>, f: (input: A, i: number) => Result.Result<B, X>): Array<A>
} = dual(
  2,
  <A, B, X>(self: Iterable<A>, f: (input: A, i: number) => Result.Result<B, X>): Array<A> => {
    const input = fromIterable(self)
    let i = 0
    while (i < input.length) {
      if (Result.isFailure(f(input[i], i))) {
        break
      }
      i++
    }
    return input.slice(i)
  }
)