Hyperlinkv0.8.0-beta.28

Chunk

Chunk.filterMapWhileconsteffect/Chunk.ts:1098
<A, B, X>(f: Filter.Filter<A, B, X>): (self: Chunk<A>) => Chunk<B>
<A, B, X>(self: Chunk<A>, f: Filter.Filter<A, B, X>): Chunk<B>

Transforms all elements of the chunk for as long as the specified function succeeds.

Example (Filtering and mapping while values match)

import { Chunk, Result } from "effect"

const chunk = Chunk.make("1", "2", "hello", "3", "4")
const result = Chunk.filterMapWhile(chunk, (s) => {
  const num = parseInt(s)
  return isNaN(num) ? Result.failVoid : Result.succeed(num)
})
console.log(Chunk.toArray(result)) // [1, 2]
// Stops at "hello" and doesn't process "3", "4"

// Compare with regular filterMap
const allNumbers = Chunk.filterMap(chunk, (s) => {
  const num = parseInt(s)
  return isNaN(num) ? Result.failVoid : Result.succeed(num)
})
console.log(Chunk.toArray(allNumbers)) // [1, 2, 3, 4]
filtering
Source effect/Chunk.ts:109815 lines
export const filterMapWhile: {
  <A, B, X>(f: Filter.Filter<A, B, X>): (self: Chunk<A>) => Chunk<B>
  <A, B, X>(self: Chunk<A>, f: Filter.Filter<A, B, X>): Chunk<B>
} = dual(2, <A, B, X>(self: Chunk<A>, f: Filter.Filter<A, B, X>): Chunk<B> => {
  const out: Array<B> = []
  for (const a of self) {
    const result = f(a)
    if (R.isSuccess(result)) {
      out.push(result.success)
    } else {
      break
    }
  }
  return fromArrayUnsafe(out)
})
Referenced by 1 symbols