Number
Works with TypeScript number values.
This module exposes the native Number constructor together with helpers for
checking, parsing, arithmetic, safe division, comparison, range checks,
clamping, rounding, ordering, equivalence, and numeric aggregation.
Constructors
Exposes the global number constructor.
When to use
Use to access native JavaScript numeric coercion from the Effect module namespace.
Gotchas
This follows native Number coercion rules, including empty strings
becoming 0 and invalid numeric strings becoming NaN.
See
- parse for parsing strings into an
Option
Signature
declare const Number: NumberConstructorParses a number from a string safely using the Number() function.
The following special string values are supported: "NaN", "Infinity", "-Infinity".
When to use
Use to parse numeric text without throwing on invalid input.
See
- Number for native constructor coercion
Signature
declare function parse(s: string): Option<number>Example
(Parsing numbers from strings)
import { Number, Option } from "effect"
Number.parse("42") // => Option.some(42)Number.parse("3.14") // => Option.some(3.14)Number.parse("NaN") // => Option.some(NaN)Number.parse("Infinity") // => Option.some(Infinity)Number.parse("-Infinity") // => Option.some(-Infinity)Number.parse("not a number") // => Option.none()Guards
Checks whether a value is a number.
When to use
Use to validate unknown input and narrow it to number.
Signature
declare const isNumber: (input: unknown) => input is numberExample
(Checking for numbers)
import { Number } from "effect"
Number.isNumber(2) // => trueNumber.isNumber("2") // => falseInstances
Equivalence
Equivalence instance for numbers where NaN is considered equal to NaN.
When to use
Use when checking numeric equality through APIs that accept an equivalence relation.
Signature
declare const Equivalence: Equ.Equivalence<number>Example
(Comparing numbers for equivalence)
import { Number } from "effect"
Number.Equivalence(1, 1) // => trueNumber.Equivalence(1, 2) // => falseNumber.Equivalence(NaN, NaN) // => trueOrder instance for number values.
When to use
Use when you need to sort or compare numbers through APIs that accept an ordering instance.
Signature
declare const Order: order.Order<number>Example
(Comparing numbers)
import { Number } from "effect"
Number.Order(1, 2) // => -1Number.Order(2, 1) // => 1Number.Order(1, 1) // => 0Math
Restricts the given number to be within the range specified by the minimum and maximum values.
When to use
Use to force a number into an inclusive range.
Details
- If the
numberis less than theminimumvalue, the function returns theminimumvalue. - If the
numberis greater than themaximumvalue, the function returns themaximumvalue. - Otherwise, it returns the original
number.
See
- between for checking whether a number is already inside a range
Signature
declare const clamp: { (options: { maximum: number; minimum: number; }): (self: number) => number; (self: number, options: { maximum: number; minimum: number; }): number;}Example
(Clamping to a range)
import { Number } from "effect"
const clamp = Number.clamp({ minimum: 1, maximum: 5 })
clamp(3) // => 3clamp(0) // => 1clamp(6) // => 5Decrements a number by 1.
When to use
Use to decrement a numeric counter by one.
Signature
declare function decrement(n: number): numberExample
(Decrementing a number)
import { Number } from "effect"
Number.decrement(3) // => 2Divides numbers safely, returning Option.none() if the divisor is 0.
When to use
Use to divide numbers while representing division by zero as Option.none.
See
- divideUnsafe for division that throws when the divisor is zero
- remainder for the numeric remainder operation
Signature
declare const divide: { (that: number): (self: number) => Option<number>; (self: number, that: number): Option<number>;}Example
(Dividing numbers safely)
import { Number, Option } from "effect"
Number.divide(6, 3) // => Option.some(2)Number.divide(6, 0) // => Option.none()divideUnsafe
Divides two number values without returning an Option.
When to use
Use to divide number values where the divisor is known to be non-zero and
a plain number result is preferred over handling Option.none.
Gotchas
Throws a RangeError if the divisor is 0.
See
- divide for division that returns
Option.nonewhen the divisor is zero
Signature
declare const divideUnsafe: { (that: number): (self: number) => number; (self: number, that: number): number;}Example
(Dividing numbers unsafely)
import { Number, Result } from "effect"
Number.divideUnsafe(6, 3) // => 2
const failure = Result.try({ try: () => Number.divideUnsafe(6, 0), catch: (error) => (error as Error).message})Result.merge(failure) // => "Division by zero"Returns the result of adding 1 to a given number.
When to use
Use to increment a numeric counter by one.
Signature
declare function increment(n: number): numberExample
(Incrementing a number)
import { Number } from "effect"
Number.increment(2) // => 3Returns the maximum between two numbers.
When to use
Use to select the larger of two numbers.
See
- min for selecting the smaller value
Signature
declare const max: { (that: number): (self: number) => number; (self: number, that: number): number;}Example
(Finding the maximum)
import { Number } from "effect"
Number.max(2, 3) // => 3Returns the minimum between two numbers.
When to use
Use to select the smaller of two numbers.
See
- max for selecting the larger value
Signature
declare const min: { (that: number): (self: number) => number; (self: number, that: number): number;}Example
(Finding the minimum)
import { Number } from "effect"
Number.min(2, 3) // => 2Provides a multiplication operation on numbers.
When to use
Use to multiply two numbers.
See
- multiplyAll for multiplying an iterable of numbers
Signature
declare const multiply: { (that: number): (self: number) => number; (self: number, that: number): number;}Example
(Multiplying numbers)
import { Number } from "effect"
Number.multiply(2, 3) // => 6multiplyAll
Takes an Iterable of numbers and returns their multiplication as a single number.
When to use
Use to multiply all numbers in an iterable.
See
- multiply for multiplying two numbers
- ReducerMultiply for multiplying through APIs that consume a
Reducer
Signature
declare function multiplyAll(collection: Iterable<number>): numberExample
(Multiplying an iterable)
import { Number } from "effect"
Number.multiplyAll([2, 3, 4]) // => 24Returns the next power of 2 from the given number.
When to use
Use to round a number up to the next power of two.
Signature
declare function nextPow2(n: number): numberExample
(Finding the next power of two)
import { Number } from "effect"
Number.nextPow2(5) // => 8Number.nextPow2(17) // => 32ReducerMax
Reducer for reducing numbers by keeping the maximum value.
When to use
Use to keep the largest number through APIs that consume a Reducer.
Details
The reducer starts from -Infinity, so reducing an empty collection returns
-Infinity.
Gotchas
NaN values propagate through Math.max.
See
- ReducerMin for keeping the smallest number
- max for comparing two numbers directly
Signature
declare const ReducerMax: Reducer.Reducer<number>ReducerMin
Reducer for reducing numbers by keeping the minimum value.
When to use
Use to keep the smallest number through APIs that consume a Reducer.
Details
The reducer starts from Infinity, so reducing an empty collection returns
Infinity.
Gotchas
NaN values propagate through Math.min.
See
- ReducerMax for keeping the largest number
- min for comparing two numbers directly
Signature
declare const ReducerMin: Reducer.Reducer<number>ReducerMultiply
Reducer for combining numbers using multiplication.
When to use
Use to multiply many numbers through APIs that consume a Reducer.
Details
The reducer starts from 1, so reducing an empty collection returns 1.
Gotchas
Reducing an iterable short-circuits when it sees 0, so later elements are
not consumed.
See
- multiplyAll for multiplying an iterable directly
Signature
declare const ReducerMultiply: Reducer.Reducer<number>ReducerSum
Reducer for combining numbers using addition.
When to use
Use to sum many numbers through APIs that consume a Reducer.
Details
The reducer starts from 0, so combineAll([]) returns 0.
See
- sumAll for summing an iterable directly
- ReducerMultiply for multiplying number values
Signature
declare const ReducerSum: Reducer.Reducer<number>Returns the remainder left over when one operand is divided by a second operand, always taking the sign of the dividend.
When to use
Use to compute a numeric remainder while preserving decimal precision better
than direct JavaScript % for decimal operands.
See
- divide for quotient calculation with division-by-zero represented as
Option.none
Signature
declare const remainder: { (divisor: number): (self: number) => number; (self: number, divisor: number): number;}Example
(Calculating remainders)
import { Number } from "effect"
Number.remainder(2, 2) // => 0Number.remainder(3, 2) // => 1Number.remainder(-4, 2) // => -0Returns the number rounded with the given precision.
When to use
Use to round a number to a fixed number of decimal places.
Signature
declare const round: { (precision: number): (self: number) => number; (self: number, precision: number): number;}Example
(Rounding with precision)
import { Number } from "effect"
Number.round(1.1234, 2) // => 1.12Number.round(1.567, 2) // => 1.57Determines the sign of a given number.
When to use
Use to classify a number as negative, zero, or positive.
Signature
declare function sign(n: number): OrderingExample
(Determining the sign)
import { Number } from "effect"
Number.sign(-5) // => -1Number.sign(0) // => 0Number.sign(5) // => 1Provides a subtraction operation on numbers.
When to use
Use to subtract one number from another.
Signature
declare const subtract: { (that: number): (self: number) => number; (self: number, that: number): number;}Example
(Subtracting numbers)
import { Number } from "effect"
Number.subtract(2, 3) // => -1Provides an addition operation on numbers.
When to use
Use to add two numbers.
See
- sumAll for summing an iterable of numbers
Signature
declare const sum: { (that: number): (self: number) => number; (self: number, that: number): number;}Example
(Adding numbers)
import { Number } from "effect"
Number.sum(2, 3) // => 5Takes an Iterable of numbers and returns their sum as a single number.
When to use
Use to sum all numbers in an iterable.
See
- sum for adding two numbers
- ReducerSum for summing through APIs that consume a
Reducer
Signature
declare function sumAll(collection: Iterable<number>): numberExample
(Summing an iterable)
import { Number } from "effect"
Number.sumAll([2, 3, 4]) // => 9Predicates
Checks whether a number is between a minimum and maximum value (inclusive).
When to use
Use to test whether a number falls inside an inclusive range.
See
- clamp for forcing a number into an inclusive range
Signature
declare const between: { (options: { maximum: number; minimum: number; }): (self: number) => boolean; (self: number, options: { maximum: number; minimum: number; }): boolean;}Example
(Checking inclusive ranges)
import { Number } from "effect"
const between = Number.between({ minimum: 0, maximum: 5 })
between(3) // => truebetween(-1) // => falsebetween(6) // => falseisGreaterThan
Returns true if the first argument is greater than the second, otherwise false.
When to use
Use to test whether one number is strictly greater than another.
Signature
declare const isGreaterThan: { (that: number): (self: number) => boolean; (self: number, that: number): boolean;}Example
(Checking greater-than comparisons)
import { Number } from "effect"
Number.isGreaterThan(2, 3) // => falseNumber.isGreaterThan(3, 3) // => falseNumber.isGreaterThan(4, 3) // => trueisGreaterThanOrEqualTo
Returns a function that checks if a given number is greater than or equal to the provided one.
When to use
Use to test whether one number is greater than or equal to another.
Signature
declare const isGreaterThanOrEqualTo: { (that: number): (self: number) => boolean; (self: number, that: number): boolean;}Example
(Checking greater-than-or-equal comparisons)
import { Number } from "effect"
Number.isGreaterThanOrEqualTo(2, 3) // => falseNumber.isGreaterThanOrEqualTo(3, 3) // => trueNumber.isGreaterThanOrEqualTo(4, 3) // => trueisLessThan
Returns true if the first argument is less than the second, otherwise false.
When to use
Use to test whether one number is strictly less than another.
Signature
declare const isLessThan: { (that: number): (self: number) => boolean; (self: number, that: number): boolean;}Example
(Checking less-than comparisons)
import { Number } from "effect"
Number.isLessThan(2, 3) // => trueNumber.isLessThan(3, 3) // => falseNumber.isLessThan(4, 3) // => falseisLessThanOrEqualTo
Returns a function that checks if a given number is less than or equal to the provided one.
When to use
Use to test whether one number is less than or equal to another.
Signature
declare const isLessThanOrEqualTo: { (that: number): (self: number) => boolean; (self: number, that: number): boolean;}Example
(Checking less-than-or-equal comparisons)
import { Number } from "effect"
Number.isLessThanOrEqualTo(2, 3) // => trueNumber.isLessThanOrEqualTo(3, 3) // => trueNumber.isLessThanOrEqualTo(4, 3) // => false