import { getApplySemigroup } from './Apply'; import { fromOption as fromOption_, fromOptionK as fromOptionK_, fromPredicate as fromPredicate_ } from './FromEither'; import { fromIOK as fromIOK_ } from './FromIO'; import { fromTaskK as fromTaskK_ } from './FromTask'; import { fromTheseK as fromTheseK_ } from './FromThese'; import { flow, pipe, SK } from './function'; import { flap as flap_ } from './Functor'; import * as _ from './internal'; import * as T from './Task'; import * as TH from './These'; import * as TT from './TheseT'; /** * @category constructors * @since 2.4.0 */ export var left = /*#__PURE__*/ TT.left(T.Pointed); /** * @category constructors * @since 2.4.0 */ export var right = /*#__PURE__*/ TT.right(T.Pointed); /** * @category constructors * @since 2.4.0 */ export var both = /*#__PURE__*/ TT.both(T.Pointed); /** * @category constructors * @since 2.4.0 */ export var rightTask = /*#__PURE__*/ TT.rightF(T.Functor); /** * @category constructors * @since 2.4.0 */ export var leftTask = /*#__PURE__*/ TT.leftF(T.Functor); /** * @category constructors * @since 2.4.0 */ export var rightIO = /*#__PURE__*/ flow(T.fromIO, rightTask); /** * @category constructors * @since 2.4.0 */ export var leftIO = /*#__PURE__*/ flow(T.fromIO, leftTask); // ------------------------------------------------------------------------------------- // conversions // ------------------------------------------------------------------------------------- /** * @category conversions * @since 2.10.0 */ export var fromEither = T.of; /** * @category conversions * @since 2.11.0 */ export var fromThese = T.of; /** * @category conversions * @since 2.7.0 */ export var fromIO = rightIO; /** * @category conversions * @since 2.4.0 */ export var fromIOEither = /*#__PURE__*/ T.fromIO; /** * @category conversions * @since 2.7.0 */ export var fromTask = rightTask; /** * @category pattern matching * @since 2.10.0 */ export var match = /*#__PURE__*/ TT.match(T.Functor); /** * 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 = match; /** * The `E` suffix (short for **E**ffect) means that the handlers return an effect (`Task`). * * @category pattern matching * @since 2.10.0 */ export var matchE = /*#__PURE__*/ TT.matchE(T.Monad); /** * Alias of [`matchE`](#matche). * * @category pattern matching * @since 2.4.0 */ export var fold = matchE; /** * Less strict version of [`matchE`](#matche). * * 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 matchEW = fold; /** * Alias of [`matchEW`](#matchew). * * @category pattern matching * @since 2.10.0 */ export var foldW = matchEW; /** * @since 2.4.0 */ export var swap = /*#__PURE__*/ TT.swap(T.Functor); var _map = function (fa, f) { return pipe(fa, map(f)); }; /* istanbul ignore next */ var _bimap = function (fa, f, g) { return pipe(fa, bimap(f, g)); }; /* istanbul ignore next */ var _mapLeft = function (fa, f) { return pipe(fa, mapLeft(f)); }; /** * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F) => F` whose argument and return types * use the type constructor `F` to represent some computational context. * * @category mapping * @since 2.4.0 */ export var map = /*#__PURE__*/ TT.map(T.Functor); /** * Map a pair of functions over the two type arguments of the bifunctor. * * @category mapping * @since 2.4.0 */ export var bimap = /*#__PURE__*/ TT.bimap(T.Functor); /** * Map a function over the first type argument of a bifunctor. * * @category error handling * @since 2.4.0 */ export var mapLeft = /*#__PURE__*/ TT.mapLeft(T.Functor); /** * @category constructors * @since 2.7.0 */ export var of = right; /** * @category type lambdas * @since 2.4.0 */ export var URI = 'TaskThese'; /** * @category instances * @since 2.10.0 */ export var getApply = function (A, S) { var ap = TT.ap(A, S); return { URI: URI, _E: undefined, map: _map, ap: function (fab, fa) { return pipe(fab, ap(fa)); } }; }; /** * @category instances * @since 2.7.0 */ export function getApplicative(A, S) { var ap = getApply(A, S).ap; return { URI: URI, _E: undefined, map: _map, ap: ap, of: of }; } /** * @category instances * @since 2.10.0 */ export function getChain(S) { var A = getApply(T.ApplicativePar, S); var chain = TT.chain(T.Monad, S); return { URI: URI, _E: undefined, map: _map, ap: A.ap, chain: function (ma, f) { return pipe(ma, chain(f)); } }; } /** * @category instances * @since 2.4.0 */ export function getMonad(S) { var A = getApplicative(T.ApplicativePar, S); var C = getChain(S); return { URI: URI, _E: undefined, map: _map, ap: A.ap, of: of, chain: C.chain, fromIO: fromIO, fromTask: fromTask }; } /** * @category instances * @since 2.10.0 */ export var Functor = { URI: URI, map: _map }; /** * @category mapping * @since 2.10.0 */ export var flap = /*#__PURE__*/ flap_(Functor); /** * @category instances * @since 2.10.0 */ export var Pointed = { URI: URI, of: of }; /** * @category instances * @since 2.10.0 */ export var Bifunctor = { URI: URI, bimap: _bimap, mapLeft: _mapLeft }; /** * @category instances * @since 2.10.0 */ export var FromEither = { URI: URI, fromEither: fromEither }; /** * @category conversions * @since 2.10.0 */ export var fromOption = /*#__PURE__*/ fromOption_(FromEither); /** * @category lifting * @since 2.10.0 */ export var fromOptionK = /*#__PURE__*/ fromOptionK_(FromEither); /** * @category lifting * @since 2.10.0 */ export var fromPredicate = /*#__PURE__*/ fromPredicate_(FromEither); /** * @category instances * @since 2.11.0 */ export var FromThese = { URI: URI, fromThese: fromThese }; /** * @category lifting * @since 2.11.0 */ export var fromTheseK = /*#__PURE__*/ fromTheseK_(FromThese); /** * @category instances * @since 2.10.0 */ export var FromIO = { URI: URI, fromIO: fromIO }; /** * @category lifting * @since 2.10.0 */ export var fromIOK = /*#__PURE__*/ fromIOK_(FromIO); /** * @category instances * @since 2.10.0 */ export var FromTask = { URI: URI, fromIO: fromIO, fromTask: fromTask }; /** * @category lifting * @since 2.10.0 */ export var fromTaskK = /*#__PURE__*/ fromTaskK_(FromTask); // ------------------------------------------------------------------------------------- // utils // ------------------------------------------------------------------------------------- /** * @since 2.10.0 */ export var toTuple2 = /*#__PURE__*/ TT.toTuple2(T.Functor); /** * @since 2.11.0 */ export var ApT = /*#__PURE__*/ of(_.emptyReadonlyArray); // ------------------------------------------------------------------------------------- // array utils // ------------------------------------------------------------------------------------- /** * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(getApplicative(T.ApplicativePar, S))`. * * @category traversing * @since 2.11.0 */ export var traverseReadonlyNonEmptyArrayWithIndex = function (S) { var g = TH.traverseReadonlyNonEmptyArrayWithIndex(S); return function (f) { return flow(T.traverseReadonlyNonEmptyArrayWithIndex(f), T.map(g(SK))); }; }; /** * Equivalent to `ReadonlyArray#traverseWithIndex(getApplicative(T.ApplicativePar, S))`. * * @category traversing * @since 2.11.0 */ export var traverseReadonlyArrayWithIndex = function (S) { return function (f) { var g = traverseReadonlyNonEmptyArrayWithIndex(S)(f); return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); }; }; }; /** * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(getApplicative(T.ApplicativeSeq, S))`. * * @category traversing * @since 2.11.0 */ export var traverseReadonlyNonEmptyArrayWithIndexSeq = function (S) { return function (f) { return function (as) { return function () { return _.tail(as).reduce(function (acc, a, i) { return acc.then(function (ebs) { return TH.isLeft(ebs) ? acc : f(i + 1, a)().then(function (eb) { if (TH.isLeft(eb)) { return eb; } if (TH.isBoth(eb)) { var right_1 = ebs.right; right_1.push(eb.right); return TH.isBoth(ebs) ? TH.both(S.concat(ebs.left, eb.left), right_1) : TH.both(eb.left, right_1); } ebs.right.push(eb.right); return ebs; }); }); }, f(0, _.head(as))().then(TH.map(_.singleton))); }; }; }; }; /** * Equivalent to `ReadonlyArray#traverseWithIndex(getApplicative(T.ApplicativeSeq, S))`. * * @category traversing * @since 2.11.0 */ export var traverseReadonlyArrayWithIndexSeq = function (S) { return function (f) { var g = traverseReadonlyNonEmptyArrayWithIndexSeq(S)(f); return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); }; }; }; // ------------------------------------------------------------------------------------- // deprecated // ------------------------------------------------------------------------------------- /** * Use [`Functor`](#functor) instead. * * @category zone of death * @since 2.7.0 * @deprecated */ export var functorTaskThese = { URI: URI, map: _map }; /** * Use [`Bifunctor`](#bifunctor) instead. * * @category zone of death * @since 2.7.0 * @deprecated */ export var bifunctorTaskThese = { URI: URI, bimap: _bimap, mapLeft: _mapLeft }; /** * Use [`toTuple2`](#totuple2) instead. * * @category zone of death * @since 2.4.0 * @deprecated */ export var toTuple = function (e, a) { return toTuple2(function () { return e; }, function () { return a; }); }; /** * This instance is deprecated, use small, specific instances instead. * For example if a function needs a `Functor` instance, pass `TT.Functor` instead of `TT.taskThese` * (where `TT` is from `import TT from 'fp-ts/TaskThese'`) * * @category zone of death * @since 2.4.0 * @deprecated */ export var taskThese = { URI: URI, map: _map, bimap: _bimap, mapLeft: _mapLeft }; /** * Use [`getApplySemigroup`](./Apply.ts.html#getapplysemigroup) instead. * * @category zone of death * @since 2.4.0 * @deprecated */ export var getSemigroup = function (SE, SA) { return getApplySemigroup(T.ApplySeq)(TH.getSemigroup(SE, SA)); };