Innovenergy_trunk/frontend/node_modules/fp-ts/es6/Separated.js

98 lines
2.3 KiB
JavaScript

/**
* ```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; };