Hyperlinkv0.8.0-beta.28

Option

Option.existsconsteffect/Option.ts:2312
<A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (
  self: Option<A>
) => self is Option<B>
<A>(predicate: Predicate<NoInfer<A>>): (self: Option<A>) => boolean
<A, B extends A>(
  self: Option<A>,
  refinement: Refinement<A, B>
): self is Option<B>
<A>(self: Option<A>, predicate: Predicate<A>): boolean

Checks whether the value in a Some satisfies a predicate or refinement.

When to use

Use to check a condition on an optional value without unwrapping

Details

  • Nonefalse
  • Some where predicate(value) is truetrue
  • Some where predicate(value) is falsefalse
  • With a refinement, narrows the Option type on true

Example (Testing a condition)

import { Option } from "effect"

const isEven = (n: number) => n % 2 === 0

console.log(Option.some(2).pipe(Option.exists(isEven)))
// Output: true

console.log(Option.some(1).pipe(Option.exists(isEven)))
// Output: false

console.log(Option.none().pipe(Option.exists(isEven)))
// Output: false
Source effect/Option.ts:231210 lines
export const exists: {
  <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): (self: Option<A>) => self is Option<B>
  <A>(predicate: Predicate<NoInfer<A>>): (self: Option<A>) => boolean
  <A, B extends A>(self: Option<A>, refinement: Refinement<A, B>): self is Option<B>
  <A>(self: Option<A>, predicate: Predicate<A>): boolean
} = dual(
  2,
  <A, B extends A>(self: Option<A>, refinement: Refinement<A, B>): self is Option<B> =>
    isNone(self) ? false : refinement(self.value)
)