fp-ts-std
Version:
The missing pseudo-standard library for fp-ts.
235 lines • 7.56 kB
TypeScript
/**
* Utility functions to accommodate `fp-ts/Option`.
*
* @since 0.1.0
*/
import type { Endomorphism } from "fp-ts/Endomorphism";
import type { Eq } from "fp-ts/Eq";
import type { Option } from "fp-ts/Option";
import * as O from "fp-ts/Option";
import * as L from "./Lazy";
type Lazy<A> = L.Lazy<A>;
import type { Bounded } from "fp-ts/Bounded";
import type { Enum } from "./Enum";
/**
* Unwrap the value from within an `Option`, throwing `msg` if `None`.
*
* @example
* import { unsafeExpect } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
*
* assert.throws(
* () => unsafeExpect('foo')(O.none),
* Error('Unwrapped `None`', { cause: Error('foo') }),
* )
*
* @category 3 Functions
* @since 0.16.0
*/
export declare const unsafeExpect: (msg: string) => <A>(x: Option<A>) => A;
/**
* Unwrap the value from within an `Option`, throwing if `None`.
*
* @example
* import { unsafeUnwrap } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
*
* assert.deepStrictEqual(unsafeUnwrap(O.some(5)), 5)
*
* @category 3 Functions
* @since 0.1.0
*/
export declare const unsafeUnwrap: <A>(x: Option<A>) => A;
/**
* A thunked `None` constructor. Enables specifying the type of the `Option`
* without a type assertion. Helpful in certain circumstances in which type
* inferrence isn't smart enough to unify with the `Option<never>` of the
* standard `None` constructor.
*
* @example
* import { noneAs } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
*
* assert.deepStrictEqual(noneAs<any>(), O.none)
*
* @category 3 Functions
* @since 0.12.0
*/
export declare const noneAs: <A>() => Option<A>;
/**
* Given an unwrapped value and an associated `Eq` instance for determining
* equivalence, inverts an `Option` that may contain the same value, something
* else, or nothing.
*
* This can be useful for circumstances in which you want to in a sense toggle
* an `Option` value.
*
* @example
* import { invert } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
* import * as S from 'fp-ts/string'
*
* const f = invert(S.Eq)('x')
*
* assert.deepStrictEqual(f(O.none), O.some('x'))
* assert.deepStrictEqual(f(O.some('y')), O.some('x'))
* assert.deepStrictEqual(f(O.some('x')), O.none)
*
* @category 3 Functions
* @since 0.12.0
*/
export declare const invert: <A>(eq: Eq<A>) => (val: A) => Endomorphism<Option<A>>;
/**
* Extracts monoidal identity if `None`.
*
* @example
* import { toMonoid } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
* import * as Str from 'fp-ts/string'
*
* const f = toMonoid(Str.Monoid)
*
* assert.deepStrictEqual(f(O.some('x')), 'x')
* assert.deepStrictEqual(f(O.none), '')
*
* @category 2 Typeclass Methods
* @since 0.12.0
*/
export declare const toMonoid: <A>(G: import("fp-ts/lib/Monoid").Monoid<A>) => (x: Option<A>) => A;
/**
* Conditionally returns the provided `Option` or `None`. The dual to
* `memptyUnless`. The lazy value is evaluated only if the condition passes.
*
* @example
* import { constant } from 'fp-ts/function'
* import { memptyWhen } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
*
* assert.deepStrictEqual(memptyWhen(true)(constant(O.some('x'))), O.none)
* assert.deepStrictEqual(memptyWhen(true)(constant(O.none)), O.none)
* assert.deepStrictEqual(memptyWhen(false)(constant(O.some('x'))), O.some('x'))
* assert.deepStrictEqual(memptyWhen(false)(constant(O.none)), O.none)
*
* @category 2 Typeclass Methods
* @since 0.13.0
*/
export declare const memptyWhen: (x: boolean) => <A>(m: Lazy<Option<A>>) => Option<A>;
/**
* Conditionally returns the provided `Option` or `None`. The dual to
* `memptyWhen`. The lazy value is evaluated only if the condition passes.
*
* @example
* import { constant } from 'fp-ts/function'
* import { memptyUnless } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
*
* assert.deepStrictEqual(memptyUnless(true)(constant(O.some('x'))), O.some('x'))
* assert.deepStrictEqual(memptyUnless(true)(constant(O.none)), O.none)
* assert.deepStrictEqual(memptyUnless(false)(constant(O.some('x'))), O.none)
* assert.deepStrictEqual(memptyUnless(false)(constant(O.none)), O.none)
*
* @category 2 Typeclass Methods
* @since 0.13.0
*/
export declare const memptyUnless: (x: boolean) => <A>(m: Lazy<Option<A>>) => Option<A>;
/**
* Conditionally lifts a value to `Some` or returns `None`. The lazy value is
* evaluated only if the condition passes.
*
* @example
* import { constant } from 'fp-ts/function'
* import { pureIf } from 'fp-ts-std/Option'
* import { Predicate } from 'fp-ts/Predicate'
*
* const person = { name: 'Hodor', age: 40 }
* const isMagicNumber: Predicate<number> = n => n === 42
*
* const mname = pureIf(isMagicNumber(person.age))(constant(person.name))
*
* @category 2 Typeclass Methods
* @since 0.13.0
*/
export declare const pureIf: (x: boolean) => <A>(y: Lazy<A>) => Option<A>;
/**
* Like `altAll`, but flaps an input across an array of functions to produce
* the `Option` values, short-circuiting upon a non-empty value. Useful given
* `Option`'s eagerness.
*
* @example
* import { constant } from 'fp-ts/function'
* import { altAllBy } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
*
* assert.deepStrictEqual(
* altAllBy([constant(O.none), O.some])('foo'),
* O.some('foo'),
* )
*
* @category 2 Typeclass Methods
* @since 0.15.0
*/
export declare const altAllBy: <A, B>(fs: Array<(x: A) => Option<B>>) => (x: A) => Option<B>;
/**
* Derive a `Bounded` instance for `Option<A>` in which the top and bottom
* bounds are `Some(B.top)` and `None` respectively.
*
* @example
* import { getBounded } from 'fp-ts-std/Option'
* import * as O from 'fp-ts/Option'
* import * as Bool from 'fp-ts-std/Boolean'
*
* assert.deepStrictEqual(
* getBounded(Bool.Bounded).top,
* O.some(true),
* )
*
* @category 1 Typeclass Instances
* @since 0.17.0
*/
export declare const getBounded: <A>(B: Bounded<A>) => Bounded<Option<A>>;
/**
* Derive an `Enum` instance for `Option<A>` given an `Enum` instance for `A`.
*
* @example
* import { universe } from 'fp-ts-std/Enum'
* import { Enum as EnumBool } from 'fp-ts-std/Boolean'
* import * as O from 'fp-ts/Option'
* import { getEnum as getEnumO } from 'fp-ts-std/Option'
*
* const EnumBoolO = getEnumO(EnumBool)
*
* assert.deepStrictEqual(
* universe(EnumBoolO),
* [O.none, O.some(false), O.some(true)],
* )
*
* @category 1 Typeclass Instances
* @since 0.17.0
*/
export declare const getEnum: <A>(E: Enum<A>) => Enum<Option<A>>;
/**
* Pattern match against two `Option`s simultaneously.
*
* @example
* import { constant, flow } from 'fp-ts/function'
* import * as O from 'fp-ts/Option'
* import Option = O.Option
* import { match2 } from 'fp-ts-std/Option'
* import * as Str from 'fp-ts-std/String'
*
* const f: (x: Option<string>) => (y: Option<number>) => string = match2(
* constant('Who are you?'),
* Str.prepend('Your name is '),
* flow(Str.fromNumber, Str.prepend('Your age is ')),
* name => age => `You are ${name}, ${age}`,
* )
*
* assert.strictEqual(f(O.none)(O.some(40)), 'Your age is 40')
* assert.strictEqual(f(O.some("Hodor"))(O.some(40)), 'You are Hodor, 40')
*
* @category 3 Functions
* @since 0.17.0
*/
export declare const match2: <A, B, C>(onNone: Lazy<C>, onSomeFst: (x: A) => C, onSomeSnd: (x: B) => C, onSomeBoth: (x: A) => (y: B) => C) => (mx: Option<A>) => (my: Option<B>) => C;
export {};
//# sourceMappingURL=Option.d.ts.map