|
- /**
- * ```ts
- * interface Separated<E, A> {
- * readonly left: E
- * readonly right: A
- * }
- * ```
- *
- * Represents a result of separating a whole into two parts.
- *
- * @since 2.10.0
- */
- import { pipe } from './function';
- import { flap as flap_ } from './Functor';
- // -------------------------------------------------------------------------------------
- // constructors
- // -------------------------------------------------------------------------------------
- /**
- * @category constructors
- * @since 2.10.0
- */
- export var separated = function (left, right) { return ({ left: left, right: right }); };
- var _map = function (fa, f) { return pipe(fa, map(f)); };
- var _mapLeft = function (fa, f) { return pipe(fa, mapLeft(f)); };
- var _bimap = function (fa, g, f) { return pipe(fa, bimap(g, f)); };
- /**
- * `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.
- *
- * @category mapping
- * @since 2.10.0
- */
- export var map = function (f) {
- return function (fa) {
- return separated(left(fa), f(right(fa)));
- };
- };
- /**
- * Map a function over the first type argument of a bifunctor.
- *
- * @category error handling
- * @since 2.10.0
- */
- export var mapLeft = function (f) {
- return function (fa) {
- return separated(f(left(fa)), right(fa));
- };
- };
- /**
- * Map a pair of functions over the two type arguments of the bifunctor.
- *
- * @category mapping
- * @since 2.10.0
- */
- export var bimap = function (f, g) {
- return function (fa) {
- return separated(f(left(fa)), g(right(fa)));
- };
- };
- /**
- * @category type lambdas
- * @since 2.10.0
- */
- export var URI = 'Separated';
- /**
- * @category instances
- * @since 2.10.0
- */
- export var Bifunctor = {
- URI: URI,
- mapLeft: _mapLeft,
- bimap: _bimap
- };
- /**
- * @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);
- // -------------------------------------------------------------------------------------
- // utils
- // -------------------------------------------------------------------------------------
- /**
- * @since 2.10.0
- */
- export var left = function (s) { return s.left; };
- /**
- * @since 2.10.0
- */
- export var right = function (s) { return s.right; };
|