import { getApplicativeMonoid } from './Applicative'; import { apFirst as apFirst_, apS as apS_, apSecond as apSecond_, getApplySemigroup as getApplySemigroup_ } from './Apply'; import { bind as bind_, chainFirst as chainFirst_ } from './Chain'; import { chainEitherK as chainEitherK_, fromEitherK as fromEitherK_, chainFirstEitherK as chainFirstEitherK_ } from './FromEither'; import { constNull, constUndefined, flow, identity, pipe } from './function'; import { let as let__, bindTo as bindTo_, flap as flap_ } from './Functor'; import * as _ from './internal'; import { not } from './Predicate'; import { first, last } from './Semigroup'; import { separated } from './Separated'; import { wiltDefault, witherDefault } from './Witherable'; import { guard as guard_ } from './Zero'; // ------------------------------------------------------------------------------------- // constructors // ------------------------------------------------------------------------------------- /** * `None` doesn't have a constructor, instead you can use it directly as a value. Represents a missing value. * * @category constructors * @since 2.0.0 */ export var none = _.none; /** * Constructs a `Some`. Represents an optional value that exists. * * @category constructors * @since 2.0.0 */ export var some = _.some; export function fromPredicate(predicate) { return function (a) { return (predicate(a) ? some(a) : none); }; } /** * Returns the `Left` value of an `Either` if possible. * * @example * import { getLeft, none, some } from 'fp-ts/Option' * import { right, left } from 'fp-ts/Either' * * assert.deepStrictEqual(getLeft(right(1)), none) * assert.deepStrictEqual(getLeft(left('a')), some('a')) * * @category constructors * @since 2.0.0 */ export var getLeft = function (ma) { return (ma._tag === 'Right' ? none : some(ma.left)); }; /** * Returns the `Right` value of an `Either` if possible. * * @example * import { getRight, none, some } from 'fp-ts/Option' * import { right, left } from 'fp-ts/Either' * * assert.deepStrictEqual(getRight(right(1)), some(1)) * assert.deepStrictEqual(getRight(left('a')), none) * * @category constructors * @since 2.0.0 */ export var getRight = function (ma) { return (ma._tag === 'Left' ? none : some(ma.right)); }; var _map = function (fa, f) { return pipe(fa, map(f)); }; var _ap = function (fab, fa) { return pipe(fab, ap(fa)); }; var _chain = function (ma, f) { return pipe(ma, chain(f)); }; var _reduce = function (fa, b, f) { return pipe(fa, reduce(b, f)); }; var _foldMap = function (M) { var foldMapM = foldMap(M); return function (fa, f) { return pipe(fa, foldMapM(f)); }; }; var _reduceRight = function (fa, b, f) { return pipe(fa, reduceRight(b, f)); }; var _traverse = function (F) { var traverseF = traverse(F); return function (ta, f) { return pipe(ta, traverseF(f)); }; }; /* istanbul ignore next */ var _alt = function (fa, that) { return pipe(fa, alt(that)); }; var _filter = function (fa, predicate) { return pipe(fa, filter(predicate)); }; /* istanbul ignore next */ var _filterMap = function (fa, f) { return pipe(fa, filterMap(f)); }; /* istanbul ignore next */ var _extend = function (wa, f) { return pipe(wa, extend(f)); }; /* istanbul ignore next */ var _partition = function (fa, predicate) { return pipe(fa, partition(predicate)); }; /* istanbul ignore next */ var _partitionMap = function (fa, f) { return pipe(fa, partitionMap(f)); }; /** * @category type lambdas * @since 2.0.0 */ export var URI = 'Option'; /** * @category instances * @since 2.0.0 */ export var getShow = function (S) { return ({ show: function (ma) { return (isNone(ma) ? 'none' : "some(".concat(S.show(ma.value), ")")); } }); }; /** * @example * import { none, some, getEq } from 'fp-ts/Option' * import * as N from 'fp-ts/number' * * const E = getEq(N.Eq) * assert.strictEqual(E.equals(none, none), true) * assert.strictEqual(E.equals(none, some(1)), false) * assert.strictEqual(E.equals(some(1), none), false) * assert.strictEqual(E.equals(some(1), some(2)), false) * assert.strictEqual(E.equals(some(1), some(1)), true) * * @category instances * @since 2.0.0 */ export var getEq = function (E) { return ({ equals: function (x, y) { return x === y || (isNone(x) ? isNone(y) : isNone(y) ? false : E.equals(x.value, y.value)); } }); }; /** * The `Ord` instance allows `Option` values to be compared with * `compare`, whenever there is an `Ord` instance for * the type the `Option` contains. * * `None` is considered to be less than any `Some` value. * * * @example * import { none, some, getOrd } from 'fp-ts/Option' * import * as N from 'fp-ts/number' * * const O = getOrd(N.Ord) * assert.strictEqual(O.compare(none, none), 0) * assert.strictEqual(O.compare(none, some(1)), -1) * assert.strictEqual(O.compare(some(1), none), 1) * assert.strictEqual(O.compare(some(1), some(2)), -1) * assert.strictEqual(O.compare(some(1), some(1)), 0) * * @category instances * @since 2.0.0 */ export var getOrd = function (O) { return ({ equals: getEq(O).equals, compare: function (x, y) { return (x === y ? 0 : isSome(x) ? (isSome(y) ? O.compare(x.value, y.value) : 1) : -1); } }); }; /** * Monoid returning the left-most non-`None` value. If both operands are `Some`s then the inner values are * concatenated using the provided `Semigroup` * * | x | y | concat(x, y) | * | ------- | ------- | ------------------ | * | none | none | none | * | some(a) | none | some(a) | * | none | some(b) | some(b) | * | some(a) | some(b) | some(concat(a, b)) | * * @example * import { getMonoid, some, none } from 'fp-ts/Option' * import { SemigroupSum } from 'fp-ts/number' * * const M = getMonoid(SemigroupSum) * assert.deepStrictEqual(M.concat(none, none), none) * assert.deepStrictEqual(M.concat(some(1), none), some(1)) * assert.deepStrictEqual(M.concat(none, some(1)), some(1)) * assert.deepStrictEqual(M.concat(some(1), some(2)), some(3)) * * @category instances * @since 2.0.0 */ export var getMonoid = function (S) { return ({ concat: function (x, y) { return (isNone(x) ? y : isNone(y) ? x : some(S.concat(x.value, y.value))); }, empty: none }); }; /** * @category mapping * @since 2.0.0 */ export var map = function (f) { return function (fa) { return isNone(fa) ? none : some(f(fa.value)); }; }; /** * @category instances * @since 2.7.0 */ export var Functor = { URI: URI, map: _map }; /** * @category constructors * @since 2.7.0 */ export var of = some; /** * @category instances * @since 2.10.0 */ export var Pointed = { URI: URI, of: of }; /** * @since 2.0.0 */ export var ap = function (fa) { return function (fab) { return isNone(fab) ? none : isNone(fa) ? none : some(fab.value(fa.value)); }; }; /** * @category instances * @since 2.10.0 */ export var Apply = { URI: URI, map: _map, ap: _ap }; /** * @category instances * @since 2.7.0 */ export var Applicative = { URI: URI, map: _map, ap: _ap, of: of }; /** * Composes computations in sequence, using the return value of one computation to determine the next computation. * * @category sequencing * @since 2.0.0 */ export var chain = function (f) { return function (ma) { return isNone(ma) ? none : f(ma.value); }; }; /** * @category instances * @since 2.10.0 */ export var Chain = { URI: URI, map: _map, ap: _ap, chain: _chain }; /** * @category instances * @since 2.7.0 */ export var Monad = { URI: URI, map: _map, ap: _ap, of: of, chain: _chain }; /** * @category folding * @since 2.0.0 */ export var reduce = function (b, f) { return function (fa) { return isNone(fa) ? b : f(b, fa.value); }; }; /** * @category folding * @since 2.0.0 */ export var foldMap = function (M) { return function (f) { return function (fa) { return isNone(fa) ? M.empty : f(fa.value); }; }; }; /** * @category folding * @since 2.0.0 */ export var reduceRight = function (b, f) { return function (fa) { return isNone(fa) ? b : f(fa.value, b); }; }; /** * @category instances * @since 2.7.0 */ export var Foldable = { URI: URI, reduce: _reduce, foldMap: _foldMap, reduceRight: _reduceRight }; /** * Less strict version of [`alt`](#alt). * * The `W` suffix (short for **W**idening) means that the return types will be merged. * * @category error handling * @since 2.9.0 */ export var altW = function (that) { return function (fa) { return isNone(fa) ? that() : fa; }; }; /** * Identifies an associative operation on a type constructor. It is similar to `Semigroup`, except that it applies to * types of kind `* -> *`. * * In case of `Option` returns the left-most non-`None` value. * * | x | y | pipe(x, alt(() => y) | * | ------- | ------- | -------------------- | * | none | none | none | * | some(a) | none | some(a) | * | none | some(b) | some(b) | * | some(a) | some(b) | some(a) | * * @example * import * as O from 'fp-ts/Option' * import { pipe } from 'fp-ts/function' * * assert.deepStrictEqual( * pipe( * O.none, * O.alt(() => O.none) * ), * O.none * ) * assert.deepStrictEqual( * pipe( * O.some('a'), * O.alt(() => O.none) * ), * O.some('a') * ) * assert.deepStrictEqual( * pipe( * O.none, * O.alt(() => O.some('b')) * ), * O.some('b') * ) * assert.deepStrictEqual( * pipe( * O.some('a'), * O.alt(() => O.some('b')) * ), * O.some('a') * ) * * @category error handling * @since 2.0.0 */ export var alt = altW; /** * @category instances * @since 2.7.0 */ export var Alt = { URI: URI, map: _map, alt: _alt }; /** * @since 2.7.0 */ export var zero = function () { return none; }; /** * @category instances * @since 2.11.0 */ export var Zero = { URI: URI, zero: zero }; /** * @category do notation * @since 2.11.0 */ export var guard = /*#__PURE__*/ guard_(Zero, Pointed); /** * @category instances * @since 2.7.0 */ export var Alternative = { URI: URI, map: _map, ap: _ap, of: of, alt: _alt, zero: zero }; /** * @since 2.0.0 */ export var extend = function (f) { return function (wa) { return isNone(wa) ? none : some(f(wa)); }; }; /** * @category instances * @since 2.7.0 */ export var Extend = { URI: URI, map: _map, extend: _extend }; /** * @category filtering * @since 2.0.0 */ export var compact = /*#__PURE__*/ chain(identity); var defaultSeparated = /*#__PURE__*/ separated(none, none); /** * @category filtering * @since 2.0.0 */ export var separate = function (ma) { return isNone(ma) ? defaultSeparated : separated(getLeft(ma.value), getRight(ma.value)); }; /** * @category instances * @since 2.7.0 */ export var Compactable = { URI: URI, compact: compact, separate: separate }; /** * @category filtering * @since 2.0.0 */ export var filter = function (predicate) { return function (fa) { return isNone(fa) ? none : predicate(fa.value) ? fa : none; }; }; /** * @category filtering * @since 2.0.0 */ export var filterMap = function (f) { return function (fa) { return isNone(fa) ? none : f(fa.value); }; }; /** * @category filtering * @since 2.0.0 */ export var partition = function (predicate) { return function (fa) { return separated(_filter(fa, not(predicate)), _filter(fa, predicate)); }; }; /** * @category filtering * @since 2.0.0 */ export var partitionMap = function (f) { return flow(map(f), separate); }; /** * @category instances * @since 2.7.0 */ export var Filterable = { URI: URI, map: _map, compact: compact, separate: separate, filter: _filter, filterMap: _filterMap, partition: _partition, partitionMap: _partitionMap }; /** * @category traversing * @since 2.6.3 */ export var traverse = function (F) { return function (f) { return function (ta) { return isNone(ta) ? F.of(none) : F.map(f(ta.value), some); }; }; }; /** * @category traversing * @since 2.6.3 */ export var sequence = function (F) { return function (ta) { return isNone(ta) ? F.of(none) : F.map(ta.value, some); }; }; /** * @category instances * @since 2.7.0 */ export var Traversable = { URI: URI, map: _map, reduce: _reduce, foldMap: _foldMap, reduceRight: _reduceRight, traverse: _traverse, sequence: sequence }; var _wither = /*#__PURE__*/ witherDefault(Traversable, Compactable); var _wilt = /*#__PURE__*/ wiltDefault(Traversable, Compactable); /** * @category filtering * @since 2.6.5 */ export var wither = function (F) { var _witherF = _wither(F); return function (f) { return function (fa) { return _witherF(fa, f); }; }; }; /** * @category filtering * @since 2.6.5 */ export var wilt = function (F) { var _wiltF = _wilt(F); return function (f) { return function (fa) { return _wiltF(fa, f); }; }; }; /** * @category instances * @since 2.7.0 */ export var Witherable = { URI: URI, map: _map, reduce: _reduce, foldMap: _foldMap, reduceRight: _reduceRight, traverse: _traverse, sequence: sequence, compact: compact, separate: separate, filter: _filter, filterMap: _filterMap, partition: _partition, partitionMap: _partitionMap, wither: _wither, wilt: _wilt }; /** * @since 2.7.0 */ export var throwError = function () { return none; }; /** * @category instances * @since 2.7.0 */ export var MonadThrow = { URI: URI, map: _map, ap: _ap, of: of, chain: _chain, throwError: throwError }; /** * Transforms an `Either` to an `Option` discarding the error. * * Alias of [getRight](#getright) * * @category conversions * @since 2.0.0 */ export var fromEither = getRight; /** * @category instances * @since 2.11.0 */ export var FromEither = { URI: URI, fromEither: fromEither }; // ------------------------------------------------------------------------------------- // refinements // ------------------------------------------------------------------------------------- /** * Returns `true` if the option is an instance of `Some`, `false` otherwise. * * @example * import { some, none, isSome } from 'fp-ts/Option' * * assert.strictEqual(isSome(some(1)), true) * assert.strictEqual(isSome(none), false) * * @category refinements * @since 2.0.0 */ export var isSome = _.isSome; /** * Returns `true` if the option is `None`, `false` otherwise. * * @example * import { some, none, isNone } from 'fp-ts/Option' * * assert.strictEqual(isNone(some(1)), false) * assert.strictEqual(isNone(none), true) * * @category refinements * @since 2.0.0 */ export var isNone = function (fa) { return fa._tag === 'None'; }; /** * Less strict version of [`match`](#match). * * The `W` suffix (short for **W**idening) means that the handler return types will be merged. * * @category pattern matching * @since 2.10.0 */ export var matchW = function (onNone, onSome) { return function (ma) { return isNone(ma) ? onNone() : onSome(ma.value); }; }; /** * Alias of [`matchW`](#matchw). * * @category pattern matching * @since 2.10.0 */ export var foldW = matchW; /** * Takes a (lazy) default value, a function, and an `Option` value, if the `Option` value is `None` the default value is * returned, otherwise the function is applied to the value inside the `Some` and the result is returned. * * @example * import { some, none, match } from 'fp-ts/Option' * import { pipe } from 'fp-ts/function' * * assert.strictEqual( * pipe( * some(1), * match(() => 'a none', a => `a some containing ${a}`) * ), * 'a some containing 1' * ) * * assert.strictEqual( * pipe( * none, * match(() => 'a none', a => `a some containing ${a}`) * ), * 'a none' * ) * * @category pattern matching * @since 2.10.0 */ export var match = matchW; /** * Alias of [`match`](#match). * * @category pattern matching * @since 2.0.0 */ export var fold = match; /** * Less strict version of [`getOrElse`](#getorelse). * * The `W` suffix (short for **W**idening) means that the handler return type will be merged. * * @category error handling * @since 2.6.0 */ export var getOrElseW = function (onNone) { return function (ma) { return isNone(ma) ? onNone() : ma.value; }; }; /** * Extracts the value out of the structure, if it exists. Otherwise returns the given default value * * @example * import { some, none, getOrElse } from 'fp-ts/Option' * import { pipe } from 'fp-ts/function' * * assert.strictEqual( * pipe( * some(1), * getOrElse(() => 0) * ), * 1 * ) * assert.strictEqual( * pipe( * none, * getOrElse(() => 0) * ), * 0 * ) * * @category error handling * @since 2.0.0 */ export var getOrElse = getOrElseW; /** * @category mapping * @since 2.10.0 */ export var flap = /*#__PURE__*/ flap_(Functor); /** * Combine two effectful actions, keeping only the result of the first. * * @since 2.0.0 */ export var apFirst = /*#__PURE__*/ apFirst_(Apply); /** * Combine two effectful actions, keeping only the result of the second. * * @since 2.0.0 */ export var apSecond = /*#__PURE__*/ apSecond_(Apply); /** * @category sequencing * @since 2.0.0 */ export var flatten = compact; /** * Composes computations in sequence, using the return value of one computation to determine the next computation and * keeping only the result of the first. * * @category sequencing * @since 2.0.0 */ export var chainFirst = /*#__PURE__*/ chainFirst_(Chain); /** * @since 2.0.0 */ export var duplicate = /*#__PURE__*/ extend(identity); /** * @category lifting * @since 2.11.0 */ export var fromEitherK = /*#__PURE__*/ fromEitherK_(FromEither); /** * @category sequencing * @since 2.11.0 */ export var chainEitherK = /*#__PURE__*/ chainEitherK_(FromEither, Chain); /** * @category sequencing * @since 2.12.0 */ export var chainFirstEitherK = /*#__PURE__*/ chainFirstEitherK_(FromEither, Chain); /** * Constructs a new `Option` from a nullable type. If the value is `null` or `undefined`, returns `None`, otherwise * returns the value wrapped in a `Some`. * * @example * import { none, some, fromNullable } from 'fp-ts/Option' * * assert.deepStrictEqual(fromNullable(undefined), none) * assert.deepStrictEqual(fromNullable(null), none) * assert.deepStrictEqual(fromNullable(1), some(1)) * * @category conversions * @since 2.0.0 */ export var fromNullable = function (a) { return (a == null ? none : some(a)); }; /** * Transforms an exception into an `Option`. If `f` throws, returns `None`, otherwise returns the output wrapped in a * `Some`. * * See also [`tryCatchK`](#trycatchk). * * @example * import { none, some, tryCatch } from 'fp-ts/Option' * * assert.deepStrictEqual( * tryCatch(() => { * throw new Error() * }), * none * ) * assert.deepStrictEqual(tryCatch(() => 1), some(1)) * * @category interop * @since 2.0.0 */ export var tryCatch = function (f) { try { return some(f()); } catch (e) { return none; } }; /** * Converts a function that may throw to one returning a `Option`. * * @category interop * @since 2.10.0 */ export var tryCatchK = function (f) { return function () { var a = []; for (var _i = 0; _i < arguments.length; _i++) { a[_i] = arguments[_i]; } return tryCatch(function () { return f.apply(void 0, a); }); }; }; /** * Returns a *smart constructor* from a function that returns a nullable value. * * @example * import { fromNullableK, none, some } from 'fp-ts/Option' * * const f = (s: string): number | undefined => { * const n = parseFloat(s) * return isNaN(n) ? undefined : n * } * * const g = fromNullableK(f) * * assert.deepStrictEqual(g('1'), some(1)) * assert.deepStrictEqual(g('a'), none) * * @category lifting * @since 2.9.0 */ export var fromNullableK = function (f) { return flow(f, fromNullable); }; /** * This is `chain` + `fromNullable`, useful when working with optional values. * * @example * import { some, none, fromNullable, chainNullableK } from 'fp-ts/Option' * import { pipe } from 'fp-ts/function' * * interface Employee { * readonly company?: { * readonly address?: { * readonly street?: { * readonly name?: string * } * } * } * } * * const employee1: Employee = { company: { address: { street: { name: 'high street' } } } } * * assert.deepStrictEqual( * pipe( * fromNullable(employee1.company), * chainNullableK(company => company.address), * chainNullableK(address => address.street), * chainNullableK(street => street.name) * ), * some('high street') * ) * * const employee2: Employee = { company: { address: { street: {} } } } * * assert.deepStrictEqual( * pipe( * fromNullable(employee2.company), * chainNullableK(company => company.address), * chainNullableK(address => address.street), * chainNullableK(street => street.name) * ), * none * ) * * @category sequencing * @since 2.9.0 */ export var chainNullableK = function (f) { return function (ma) { return isNone(ma) ? none : fromNullable(f(ma.value)); }; }; /** * Extracts the value out of the structure, if it exists. Otherwise returns `null`. * * @example * import { some, none, toNullable } from 'fp-ts/Option' * import { pipe } from 'fp-ts/function' * * assert.strictEqual( * pipe( * some(1), * toNullable * ), * 1 * ) * assert.strictEqual( * pipe( * none, * toNullable * ), * null * ) * * @category conversions * @since 2.0.0 */ export var toNullable = /*#__PURE__*/ match(constNull, identity); /** * Extracts the value out of the structure, if it exists. Otherwise returns `undefined`. * * @example * import { some, none, toUndefined } from 'fp-ts/Option' * import { pipe } from 'fp-ts/function' * * assert.strictEqual( * pipe( * some(1), * toUndefined * ), * 1 * ) * assert.strictEqual( * pipe( * none, * toUndefined * ), * undefined * ) * * @category conversions * @since 2.0.0 */ export var toUndefined = /*#__PURE__*/ match(constUndefined, identity); export function elem(E) { return function (a, ma) { if (ma === undefined) { var elemE_1 = elem(E); return function (ma) { return elemE_1(a, ma); }; } return isNone(ma) ? false : E.equals(a, ma.value); }; } /** * Returns `true` if the predicate is satisfied by the wrapped value * * @example * import { some, none, exists } from 'fp-ts/Option' * import { pipe } from 'fp-ts/function' * * assert.strictEqual( * pipe( * some(1), * exists(n => n > 0) * ), * true * ) * assert.strictEqual( * pipe( * some(1), * exists(n => n > 1) * ), * false * ) * assert.strictEqual( * pipe( * none, * exists(n => n > 0) * ), * false * ) * * @since 2.0.0 */ export var exists = function (predicate) { return function (ma) { return isNone(ma) ? false : predicate(ma.value); }; }; // ------------------------------------------------------------------------------------- // do notation // ------------------------------------------------------------------------------------- /** * @category do notation * @since 2.9.0 */ export var Do = /*#__PURE__*/ of(_.emptyRecord); /** * @category do notation * @since 2.8.0 */ export var bindTo = /*#__PURE__*/ bindTo_(Functor); var let_ = /*#__PURE__*/ let__(Functor); export { /** * @category do notation * @since 2.13.0 */ let_ as let }; /** * @category do notation * @since 2.8.0 */ export var bind = /*#__PURE__*/ bind_(Chain); /** * @category do notation * @since 2.8.0 */ export var apS = /*#__PURE__*/ apS_(Apply); /** * @since 2.11.0 */ export var ApT = /*#__PURE__*/ of(_.emptyReadonlyArray); // ------------------------------------------------------------------------------------- // array utils // ------------------------------------------------------------------------------------- /** * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(Applicative)`. * * @category traversing * @since 2.11.0 */ export var traverseReadonlyNonEmptyArrayWithIndex = function (f) { return function (as) { var o = f(0, _.head(as)); if (isNone(o)) { return none; } var out = [o.value]; for (var i = 1; i < as.length; i++) { var o_1 = f(i, as[i]); if (isNone(o_1)) { return none; } out.push(o_1.value); } return some(out); }; }; /** * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`. * * @category traversing * @since 2.11.0 */ export var traverseReadonlyArrayWithIndex = function (f) { var g = traverseReadonlyNonEmptyArrayWithIndex(f); return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); }; }; /** * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`. * * @category traversing * @since 2.9.0 */ export var traverseArrayWithIndex = traverseReadonlyArrayWithIndex; /** * Equivalent to `ReadonlyArray#traverse(Applicative)`. * * @category traversing * @since 2.9.0 */ export var traverseArray = function (f) { return traverseReadonlyArrayWithIndex(function (_, a) { return f(a); }); }; /** * Equivalent to `ReadonlyArray#sequence(Applicative)`. * * @category traversing * @since 2.9.0 */ export var sequenceArray = /*#__PURE__*/ traverseArray(identity); // ------------------------------------------------------------------------------------- // deprecated // ------------------------------------------------------------------------------------- /** * Use `Refinement` module instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export function getRefinement(getOption) { return function (a) { return isSome(getOption(a)); }; } /** * Use [`chainNullableK`](#chainnullablek) instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export var mapNullable = chainNullableK; /** * This instance is deprecated, use small, specific instances instead. * For example if a function needs a `Functor` instance, pass `O.Functor` instead of `O.option` * (where `O` is from `import O from 'fp-ts/Option'`) * * @category zone of death * @since 2.0.0 * @deprecated */ export var option = { URI: URI, map: _map, of: of, ap: _ap, chain: _chain, reduce: _reduce, foldMap: _foldMap, reduceRight: _reduceRight, traverse: _traverse, sequence: sequence, zero: zero, alt: _alt, extend: _extend, compact: compact, separate: separate, filter: _filter, filterMap: _filterMap, partition: _partition, partitionMap: _partitionMap, wither: _wither, wilt: _wilt, throwError: throwError }; /** * Use [`getApplySemigroup`](./Apply.ts.html#getapplysemigroup) instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export var getApplySemigroup = /*#__PURE__*/ getApplySemigroup_(Apply); /** * Use [`getApplicativeMonoid`](./Applicative.ts.html#getapplicativemonoid) instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export var getApplyMonoid = /*#__PURE__*/ getApplicativeMonoid(Applicative); /** * Use * * ```ts * import { first } from 'fp-ts/Semigroup' * import { getMonoid } from 'fp-ts/Option' * * getMonoid(first()) * ``` * * instead. * * Monoid returning the left-most non-`None` value * * | x | y | concat(x, y) | * | ------- | ------- | ------------ | * | none | none | none | * | some(a) | none | some(a) | * | none | some(b) | some(b) | * | some(a) | some(b) | some(a) | * * @example * import { getFirstMonoid, some, none } from 'fp-ts/Option' * * const M = getFirstMonoid() * assert.deepStrictEqual(M.concat(none, none), none) * assert.deepStrictEqual(M.concat(some(1), none), some(1)) * assert.deepStrictEqual(M.concat(none, some(2)), some(2)) * assert.deepStrictEqual(M.concat(some(1), some(2)), some(1)) * * @category zone of death * @since 2.0.0 * @deprecated */ export var getFirstMonoid = function () { return getMonoid(first()); }; /** * Use * * ```ts * import { last } from 'fp-ts/Semigroup' * import { getMonoid } from 'fp-ts/Option' * * getMonoid(last()) * ``` * * instead. * * Monoid returning the right-most non-`None` value * * | x | y | concat(x, y) | * | ------- | ------- | ------------ | * | none | none | none | * | some(a) | none | some(a) | * | none | some(b) | some(b) | * | some(a) | some(b) | some(b) | * * @example * import { getLastMonoid, some, none } from 'fp-ts/Option' * * const M = getLastMonoid() * assert.deepStrictEqual(M.concat(none, none), none) * assert.deepStrictEqual(M.concat(some(1), none), some(1)) * assert.deepStrictEqual(M.concat(none, some(2)), some(2)) * assert.deepStrictEqual(M.concat(some(1), some(2)), some(2)) * * @category zone of death * @since 2.0.0 * @deprecated */ export var getLastMonoid = function () { return getMonoid(last()); };