Hyperlinkv0.8.0-beta.28

Filter

Filter.composeconsteffect/Filter.ts:733
<PassL, PassR, FailR>(right: Filter<PassL, PassR, FailR>): <
  InputL,
  FailL
>(
  left: Filter<InputL, PassL, FailL>
) => Filter<InputL, PassR, FailL | FailR>
<InputL, PassL, FailL, PassR, FailR>(
  left: Filter<InputL, PassL, FailL>,
  right: Filter<PassL, PassR, FailR>
): Filter<InputL, PassR, FailL | FailR>

Composes two filters sequentially, feeding the output of the first into the second.

Example (Composing filters)

import { Filter, Result } from "effect"

const stringFilter = Filter.string
const nonEmptyUpper = Filter.make((s: string) =>
  s.length > 0 ? Result.succeed(s.toUpperCase()) : Result.fail(s)
)

const stringToUpper = Filter.compose(stringFilter, nonEmptyUpper)
combinators
Source effect/Filter.ts:73317 lines
export const compose: {
  <PassL, PassR, FailR>(
    right: Filter<PassL, PassR, FailR>
  ): <InputL, FailL>(left: Filter<InputL, PassL, FailL>) => Filter<InputL, PassR, FailL | FailR>
  <InputL, PassL, FailL, PassR, FailR>(
    left: Filter<InputL, PassL, FailL>,
    right: Filter<PassL, PassR, FailR>
  ): Filter<InputL, PassR, FailL | FailR>
} = dual(2, <InputL, PassL, FailL, PassR, FailR>(
  left: Filter<InputL, PassL, FailL>,
  right: Filter<PassL, PassR, FailR>
): Filter<InputL, PassR, FailL | FailR> =>
(input) => {
  const leftOut = left(input)
  if (Result.isFailure(leftOut)) return leftOut as Result.Result<never, FailL | FailR>
  return right(leftOut.success)
})