Hyperlinkv0.8.0-beta.28

Chunk

Chunk.filterMapconsteffect/Chunk.ts:1022
<A, B, X>(f: (input: A, i: number) => Result<B, X>): (
  self: Chunk<A>
) => Chunk<B>
<A, B, X>(
  self: Chunk<A>,
  f: (input: A, i: number) => Result<B, X>
): Chunk<B>

Returns a filtered and mapped subset of the elements.

Example (Filtering and mapping values)

import { Chunk, Result } from "effect"

const chunk = Chunk.make("1", "2", "hello", "3", "world")
const numbers = Chunk.filterMap(chunk, (str) => {
  const num = parseInt(str)
  return isNaN(num) ? Result.failVoid : Result.succeed(num)
})
console.log(Chunk.toArray(numbers)) // [1, 2, 3]

// With index parameter
const evenIndexNumbers = Chunk.filterMap(chunk, (str, i) => {
  const num = parseInt(str)
  return isNaN(num) || i % 2 !== 0 ? Result.failVoid : Result.succeed(num)
})
console.log(Chunk.toArray(evenIndexNumbers)) // [1]
filtering
Source effect/Chunk.ts:102217 lines
export const filterMap: {
  <A, B, X>(f: (input: A, i: number) => Result<B, X>): (self: Chunk<A>) => Chunk<B>
  <A, B, X>(self: Chunk<A>, f: (input: A, i: number) => Result<B, X>): Chunk<B>
} = dual(
  2,
  <A, B, X>(self: Chunk<A>, f: (input: A, i: number) => Result<B, X>): Chunk<B> => {
    const as = RA.fromIterable(self)
    const out: Array<B> = []
    for (let i = 0; i < as.length; i++) {
      const result = f(as[i], i)
      if (R.isSuccess(result)) {
        out.push(result.success)
      }
    }
    return fromArrayUnsafe(out)
  }
)
Referenced by 1 symbols