UNPKG

fp-ts-wonka

Version:

[fp-ts](https://github.com/gcanti/fp-ts) bindings for [wonka](https://wonka.kitten.sh/)

510 lines 11.1 kB
import { apS as apS_ } from 'fp-ts/Apply'; import * as E from 'fp-ts/Either'; import * as ET from 'fp-ts/EitherT'; import { flow, pipe, identity } from 'fp-ts/function'; import { bindTo as bindTo_, flap as flap_ } from 'fp-ts/Functor'; import { bind as bind_, chainFirst as chainFirst_ } from 'fp-ts/Chain'; import * as S from './Source'; // ------------------------------------------------------------------------------------- // constructors // ------------------------------------------------------------------------------------- /** * @since 0.1.0 * @category Constructors */ export var left = /*#__PURE__*/ ET.left(S.Pointed); /** * @since 0.1.0 * @category Constructors */ export var right = /*#__PURE__*/ ET.right(S.Pointed); /** * @since 0.1.0 * @category Constructors */ export var rightSource = /*#__PURE__*/ S.map(E.right); /** * @since 0.1.0 * @category Constructors */ export var leftSource = /*#__PURE__*/ S.map(E.left); // ------------------------------------------------------------------------------------- // natural transformations // ------------------------------------------------------------------------------------- /** * @since 0.1.0 * @category Natural transformations */ export var fromIOEither = S.fromIO; /** * @since 0.1.0 * @category Natural transformations */ export var rightIO = /*#__PURE__*/ flow(S.fromIO, rightSource); /** * @since 0.1.0 * @category Natural transformations */ export var leftIO = /*#__PURE__*/ flow(S.fromIO, leftSource); /** * @since 0.1.0 * @category Natural transformations */ export var fromTaskEither = S.fromTask; /** * @since 0.1.0 * @category Natural transformations */ export var fromIO = rightIO; /** * @since 0.1.0 * @category Natural transformations */ export var fromTask = /*#__PURE__*/ flow(S.fromTask, rightSource); /** * @since 0.1.0 * @category Natural transformations */ export var fromSource = rightSource; // ------------------------------------------------------------------------------------- // destructors // ------------------------------------------------------------------------------------- /** * @since 0.1.0 * @category Destructors */ export var match = /*#__PURE__*/ flow(E.fold, S.chain); /** * Less strict version of [`match`](#match). * * @since 0.1.0 * @category Destructors */ export var matchW = match; /** * @since 0.1.0 * @category Destructors */ export var matchE = /*#__PURE__*/ ET.matchE(S.Monad); /** * Alias of [`matchE`](#matche). * * @since 0.1.0 * @category Destructors */ export var fold = matchE; /** * Less strict version of [`matchE`](#matche). * * @since 0.1.0 * @category Destructors */ export var matchEW = matchE; /** * Alias of [`matchW`](#matchW). * * @since 0.1.0 * @category Destructors */ export var foldW = matchEW; /** * @since 0.1.0 * @category Destructors */ export var getOrElse = ET.getOrElse(S.Monad); /** * Less strict version of [`getOrElse`](#getorelse). * * @since 0.1.0 * @category Destructors */ export var getOrElseW = getOrElse; // ------------------------------------------------------------------------------------- // combinators // ------------------------------------------------------------------------------------- /** * @since 0.1.0 * @category Combinators */ export var orElse = ET.orElse(S.Monad); /** * Less strict version of [`orElse`](#orelse). * * @since 0.1.0 * @category Combinators */ export var orElseW = orElse; /** * @since 0.1.0 * @category Combinators */ export var orElseFirst = /*#__PURE__*/ ET.orElseFirst(S.Monad); /** * @since 0.1.0 * @category Combinators */ export var orElseFirstW = orElseFirst; /** * @since 0.1.0 * @category Combinators */ export var orLeft = /*#__PURE__*/ ET.orLeft(S.Monad); /** * @since 0.1.0 * @category Combinators */ export var swap = ET.swap(S.Functor); // ------------------------------------------------------------------------------------- // non-pipeables // ------------------------------------------------------------------------------------- /* istanbul ignore next */ var _map = function (fa, f) { return pipe(fa, map(f)); }; /* istanbul ignore next */ var _ap = function (fab, fa) { return pipe(fab, ap(fa)); }; /* istanbul ignore next */ var _chain = function (ma, f) { return pipe(ma, chain(f)); }; /* istanbul ignore next */ var _biMap = function (fea, f, g) { return pipe(fea, bimap(f, g)); }; /* istanbul ignore next */ var _mapLeft = function (fea, f) { return pipe(fea, mapLeft(f)); }; /* istanbul ignore next */ var _alt = function (fx, fy) { return pipe(fx, alt(fy)); }; // ------------------------------------------------------------------------------------- // type class members // ------------------------------------------------------------------------------------- /** * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F<A>) * => F<B>` whose argument and return types use the type constructor `F` to * represent some computational context. * * @since 0.1.0 * @category Functor */ export var map = ET.map(S.Functor); /** * Apply a function to an argument under a type constructoS. * * @since 0.6.0 * @category Apply */ export var ap = ET.ap(S.Apply); /** * Combine two effectful actions, keeping only the result of the first. * * Derivable from `Apply`. * * @since 0.1.0 * @category Combinators */ export var apFirst = function (fb) { return flow(map(function (a) { return function () { return a; }; }), ap(fb)); }; /** * Combine two effectful actions, keeping only the result of the second. * * Derivable from `Apply`. * * @since 0.1.0 * @category Combinators */ export var apSecond = function (fb) { return flow(map(function () { return function (b) { return b; }; }), ap(fb)); }; /** * Identifies an associative operation on a type constructoS. It is similar to * `Semigroup`, except that it applies to types of kind `* -> *`. * * @since 0.1.0 * @category Alt */ export var alt = ET.alt(S.Monad); /** * @since 0.1.0 * @category Bifunctor */ export var bimap = ET.bimap(S.Functor); /** * @since 0.1.0 * @category Bifunctor */ export var mapLeft = ET.mapLeft(S.Functor); /** * Less strict version of [`chain`](#chain). * * @since 0.1.0 * @category Monad */ export var chainW = function (f) { return function (ma) { return pipe(ma, S.chain(E.fold(function (a) { return left(a); }, f))); }; }; /** * @since 0.1.0 * @category Monad */ export var chain = chainW; /** * Derivable from `Monad`. * * @since 0.6.0 * @category Combinators */ export var flatten = /*#__PURE__*/ chain(identity); /** @since 0.1.0 */ export var of = right; /** * Derivable from `MonadThrow`. * * @since 0.1.0 */ export var filterOrElse = function (predicate, onFalse) { return chain(function (a) { return (predicate(a) ? of(a) : throwError(onFalse(a))); }); }; /** * Derivable from `MonadThrow`. * * @since 0.1.0 */ export var fromEither = function (ma) { return (ma._tag === 'Left' ? throwError(ma.left) : of(ma.right)); }; /** * Derivable from `MonadThrow`. * * @since 0.1.0 */ export var fromOption = function (onNone) { return function (ma) { return ma._tag === 'None' ? throwError(onNone()) : of(ma.value); }; }; /** * Derivable from `MonadThrow`. * * @since 0.1.0 */ export var fromPredicate = function (predicate, onFalse) { return function (a) { return predicate(a) ? of(a) : throwError(onFalse(a)); }; }; /** * @since 0.1.0 * @category MonadThrow */ export var throwError = left; // ------------------------------------------------------------------------------------- // instances // ------------------------------------------------------------------------------------- /** @since 2.0.0 */ export var URI = 'wonka/SourceEither'; /** * @since 0.1.0 * @category Instances */ export var Functor = { URI: URI, map: _map, }; /** * Derivable from `Functor`. * * @since 0.1.0 * @category Combinators */ export var flap = /*#__PURE__*/ flap_(Functor); /** * @since 0.1.0 * @category Instances */ export var Pointed = { URI: URI, of: of, }; /** * @since 0.1.0 * @category Instances */ export var Apply = { URI: URI, map: _map, ap: _ap, }; /** * @since 0.1.0 * @category Instances */ export var Applicative = { URI: URI, map: _map, ap: _ap, of: of, }; /** * @since 0.1.0 * @category Instances */ export var Chain = { URI: URI, map: _map, ap: _ap, chain: _chain, }; /** * Composes computations in sequence, using the return value of one computation * to determine the next computation and keeping only the result of the first. * * Derivable from `Monad`. * * @since 0.1.0 * @category Combinators */ export var chainFirst = /*#__PURE__*/ chainFirst_(Chain); /** * Less strict version of [`chainFirst`](#chainfirst). * * Derivable from `Chain`. * * @since 0.1.0 * @category Combinators */ export var chainFirstW = chainFirst; /** * @since 0.1.0 * @category Instances */ export var Monad = { URI: URI, map: _map, ap: _ap, of: of, chain: _chain, }; /** * @since 0.1.0 * @category Instances */ export var Bifunctor = { URI: URI, bimap: _biMap, mapLeft: _mapLeft, }; /** * @since 0.1.0 * @category Instances */ export var Alt = { URI: URI, map: _map, alt: _alt, }; /** * @since 0.1.0 * @category Instances */ export var MonadIO = { URI: URI, map: _map, ap: _ap, of: of, chain: _chain, fromIO: fromIO, }; /** * @since 0.1.0 * @category Instances */ export var MonadTask = { URI: URI, map: _map, ap: _ap, of: of, chain: _chain, fromIO: fromIO, fromTask: fromTask, }; /** * @since 0.1.0 * @category Instances */ export var MonadSource = { URI: URI, map: _map, ap: _ap, of: of, chain: _chain, fromIO: fromIO, fromTask: fromTask, fromSource: fromSource, }; /** * @since 0.1.0 * @category Instances */ export var MonadThrow = { URI: URI, map: _map, ap: _ap, of: of, chain: _chain, throwError: throwError, }; // ------------------------------------------------------------------------------------- // do notation // ------------------------------------------------------------------------------------- /** @since 0.1.0 */ export var Do = /*#__PURE__*/ of({}); /** @since 0.1.0 */ export var bindTo = /*#__PURE__*/ bindTo_(Functor); /** @since 0.1.0 */ export var bind = /*#__PURE__*/ bind_(Chain); /** @since 0.1.0 */ export var bindW = bind; // ------------------------------------------------------------------------------------- // pipeable sequence S // ------------------------------------------------------------------------------------- /** @since 0.1.0 */ export var apS = /*#__PURE__*/ apS_(Apply); /** @since 0.1.0 */ export var apSW = apS; // ------------------------------------------------------------------------------------- // utils // ------------------------------------------------------------------------------------- /** @since 0.1.0 */ export var toTaskEither = S.toTask; //# sourceMappingURL=SourceEither.js.map