Skip to content
Effect 4.0 is here. One ecosystem. Zero dependencies.

Boolean

Works with TypeScript boolean values.

This module exposes the native Boolean constructor together with helpers for checking values, choosing between lazy branches, combining booleans with logical operations, checking collections with every or some, ordering booleans, and reducing boolean values.

17 exports Since v2.0.0 Source

Combinators

Since v2.0.0

Combines two booleans using logical AND: self && that.

When to use

Use to require both boolean operands to be true.

Details

Supports both data-first and data-last forms.

Signature

declare const and: {
(that: boolean): (self: boolean) => boolean;
(self: boolean, that: boolean): boolean;
}

Example Combining booleans with AND

import { Boolean } from "effect"
Boolean.and(true, true) // => true
Boolean.and(true, false) // => false
Boolean.and(false, true) // => false
Boolean.and(false, false) // => false
Since v2.0.0

Combines two booleans using EQV (aka XNOR): !xor(self, that).

When to use

Use to accept when both boolean operands have the same truth value.

Signature

declare const eqv: {
(that: boolean): (self: boolean) => boolean;
(self: boolean, that: boolean): boolean;
}

Example Checking boolean equivalence

import { Boolean } from "effect"
Boolean.eqv(true, true) // => true
Boolean.eqv(true, false) // => false
Boolean.eqv(false, true) // => false
Boolean.eqv(false, false) // => true
Since v2.0.0

Combines two booleans using an implication: (!self || that).

When to use

Use to model logical implication between a condition and a consequence.

Signature

declare const implies: {
(that: boolean): (self: boolean) => boolean;
(self: boolean, that: boolean): boolean;
}

Example Checking boolean implication

import { Boolean } from "effect"
Boolean.implies(true, true) // => true
Boolean.implies(true, false) // => false
Boolean.implies(false, true) // => true
Boolean.implies(false, false) // => true
Since v2.0.0

Combines two booleans using NAND: !(self && that).

When to use

Use to negate a logical AND result.

Signature

declare const nand: {
(that: boolean): (self: boolean) => boolean;
(self: boolean, that: boolean): boolean;
}

Example Combining booleans with NAND

import { Boolean } from "effect"
Boolean.nand(true, true) // => false
Boolean.nand(true, false) // => true
Boolean.nand(false, true) // => true
Boolean.nand(false, false) // => true
Since v2.0.0

Combines two booleans using NOR: !(self || that).

When to use

Use to accept only when both boolean operands are false.

Signature

declare const nor: {
(that: boolean): (self: boolean) => boolean;
(self: boolean, that: boolean): boolean;
}

Example Combining booleans with NOR

import { Boolean } from "effect"
Boolean.nor(true, true) // => false
Boolean.nor(true, false) // => false
Boolean.nor(false, true) // => false
Boolean.nor(false, false) // => true
Since v2.0.0

Negates the given boolean: !self

When to use

Use to invert a boolean value.

Signature

declare function not(self: boolean): boolean

Example Negating booleans

import { Boolean } from "effect"
Boolean.not(true) // => false
Boolean.not(false) // => true
Since v2.0.0

Combines two booleans using OR: self || that.

When to use

Use to accept when either boolean operand is true.

Signature

declare const or: {
(that: boolean): (self: boolean) => boolean;
(self: boolean, that: boolean): boolean;
}

Example Combining booleans with OR

import { Boolean } from "effect"
Boolean.or(true, true) // => true
Boolean.or(true, false) // => true
Boolean.or(false, true) // => true
Boolean.or(false, false) // => false
Since v2.0.0

Combines two booleans using XOR: (!self && that) || (self && !that).

When to use

Use to accept when exactly one boolean operand is true.

Signature

declare const xor: {
(that: boolean): (self: boolean) => boolean;
(self: boolean, that: boolean): boolean;
}

Example Combining booleans with XOR

import { Boolean } from "effect"
Boolean.xor(true, true) // => false
Boolean.xor(true, false) // => true
Boolean.xor(false, true) // => true
Boolean.xor(false, false) // => false

Constructors

Since v4.0.0

Exposes the global boolean constructor for JavaScript truthiness coercion.

When to use

Use to access native JavaScript truthiness coercion from the Effect module namespace.

Gotchas

This follows native truthiness rules. For example, non-empty strings such as "false" coerce to true.

Signature

declare const Boolean: BooleanConstructor

Example Coercing values to booleans

import { Boolean } from "effect"
Boolean.Boolean(1) // => true
Boolean.Boolean("false") // => true
Boolean.Boolean(0) // => false

Guards

Checks whether a value is a boolean.

When to use

Use to validate unknown input and narrow it to boolean.

Signature

declare const isBoolean: (input: unknown) => input is boolean

Example Checking for booleans

import { Boolean } from "effect"
Boolean.isBoolean(true) // => true
Boolean.isBoolean("true") // => false

Instances

Equivalence instance for booleans using strict equality (===).

When to use

Use when checking boolean equality through APIs that accept an equivalence relation.

Signature

declare const Equivalence: Equ.Equivalence<boolean>

Example Comparing booleans for equivalence

import { Boolean } from "effect"
Boolean.Equivalence(true, true) // => true
Boolean.Equivalence(true, false) // => false
Since v2.0.0

Provides an Order instance for boolean that allows comparing and sorting boolean values. In this ordering, false is considered less than true.

When to use

Use when you need to sort or compare boolean values through APIs that accept an ordering instance where false comes before true.

Signature

declare const Order: order.Order<boolean>

Example Comparing booleans

import { Boolean } from "effect"
Boolean.Order(false, true) // => -1
Boolean.Order(true, false) // => 1
Boolean.Order(true, true) // => 0

Math

Reducer for combining booleans using AND.

When to use

Use to require every accumulated boolean to be true through APIs that consume a Reducer.

Details

The initialValue is true, so combineAll([]) returns true.

Gotchas

combineAll uses the default left-to-right Reducer.make fold and does not short-circuit on false.

See

  • ReducerOr for reducing with OR semantics
  • every for checking an iterable directly

Signature

declare const ReducerAnd: Reducer.Reducer<boolean>

Reducer for combining booleans using OR.

When to use

Use to reduce boolean values where the result should be true if any combined value is true.

Details

The initialValue is false.

See

  • ReducerAnd for reducing with AND semantics
  • some for checking an iterable directly

Signature

declare const ReducerOr: Reducer.Reducer<boolean>

Pattern Matching

Since v2.0.0

Chooses between two lazy branches based on a boolean value.

When to use

Use to choose between two lazy branches based on a boolean value.

Signature

declare const match: {
<A, B = A>(options: {
readonly onFalse: LazyArg<A>;
readonly onTrue: LazyArg<B>;
}): (value: boolean) => A | B;
<A, B>(value: boolean, options: {
readonly onFalse: LazyArg<A>;
readonly onTrue: LazyArg<B>;
}): A | B;
}

Example Pattern matching on booleans

import { Boolean } from "effect"
Boolean.match(true, {
onFalse: () => "It's false!",
onTrue: () => "It's true!"
}) // => "It's true!"

Predicates

Since v2.0.0

Checks whether every boolean in a collection is true.

When to use

Use to check that every boolean in an iterable is true.

See

  • some for checking whether at least one value is true
  • ReducerAnd for reducing booleans with AND through a Reducer

Signature

declare function every(collection: Iterable<boolean>): boolean

Example Checking every boolean

import { Boolean } from "effect"
Boolean.every([true, true, true]) // => true
Boolean.every([true, false, true]) // => false
Since v2.0.0

Checks whether at least one boolean in a collection is true.

When to use

Use to check that at least one boolean in an iterable is true.

See

  • every for checking whether all values are true
  • ReducerOr for reducing booleans with OR through a Reducer

Signature

declare function some(collection: Iterable<boolean>): boolean

Example Checking some booleans

import { Boolean } from "effect"
Boolean.some([true, false, true]) // => true
Boolean.some([false, false, false]) // => false