fp-ts-wonka
Version:
[fp-ts](https://github.com/gcanti/fp-ts) bindings for [wonka](https://wonka.kitten.sh/)
510 lines • 11.1 kB
JavaScript
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