Hyperlinkv0.8.0-beta.28

Option

Option.filterconsteffect/Option.ts:2020
<A, B extends A>(refinement: Refinement<A, B>): (
  self: Option<A>
) => Option<B>
<A>(predicate: Predicate<A>): <B extends A>(self: Option<B>) => Option<B>
<A, B extends A>(self: Option<A>, refinement: Refinement<A, B>): Option<B>
<A>(self: Option<A>, predicate: Predicate<A>): Option<A>

Filters an Option using a predicate. Returns None if the predicate is not satisfied or the input is None.

When to use

Use when you need to discard an Option's present value when it does not meet a condition, while narrowing the type via a refinement predicate.

Details

  • NoneNone
  • Some where predicate(value) is trueSome(value)
  • Some where predicate(value) is falseNone
  • Supports refinements for type narrowing

Example (Filtering with a predicate)

import { Option } from "effect"

const removeEmpty = (input: Option.Option<string>) =>
  Option.filter(input, (value) => value !== "")

console.log(removeEmpty(Option.some("hello")))
// Output: { _id: 'Option', _tag: 'Some', value: 'hello' }

console.log(removeEmpty(Option.some("")))
// Output: { _id: 'Option', _tag: 'None' }

console.log(removeEmpty(Option.none()))
// Output: { _id: 'Option', _tag: 'None' }
Source effect/Option.ts:202010 lines
export const filter: {
  <A, B extends A>(refinement: Refinement<A, B>): (self: Option<A>) => Option<B>
  <A>(predicate: Predicate<A>): <B extends A>(self: Option<B>) => Option<B>
  <A, B extends A>(self: Option<A>, refinement: Refinement<A, B>): Option<B>
  <A>(self: Option<A>, predicate: Predicate<A>): Option<A>
} = dual(
  2,
  <A>(self: Option<A>, predicate: Predicate<A>): Option<A> =>
    isNone(self) ? none() : predicate(self.value) ? some(self.value) : none()
)
Referenced by 8 symbols