3.3.1 • Published 2 years ago
@sweet-monads/identity v3.3.1
@sweet-monads/identity
Identity Monad, The Identity monad is a monad that does not embody any computational strategy. It simply applies the bound function to its input without any modification.
This library belongs to sweet-monads project
sweet-monads — easy-to-use monads implementation with static types definition and separated packages.
- No dependencies, one small file
- Easily auditable TypeScript/JS code
- Check out all libraries: either, iterator, interfaces, maybe identity
Usage
npm install @sweet-monads/identity
// Before
app.use(
express.static(
path.resolve(getDirname(import.meta.url), "../public")
)
)
// After
Identity.from(import.meta.url)
.map(getDirname)
.map(dir => path.resolve(dir, "../public"))
.map(express.static)
.map(app.use);API
chainfromisIdentityIdentity#joinIdentity#mapIdentity#asyncMapIdentity#applyIdentity#asyncApplyIdentity#chainIdentity#asyncChain- Helpers
chain
function chain<A, B>(fn: (v: A) => Promise<Identity<B>>): (m: Identity<A>) => Promise<Identity<B>>;fn: (v: A) => Promise<Identity<B>>- function which should be applied asynchronously toIdentity<A>value- Returns function with
Identity<A>argument and mapped byfnvalue (could be used insidePromise#thenfunction).
Example:
const getValue = async () => from(1);
// Identity<number>
const result = await getValue()
.then(Identity.chain(async v => from(v * 2)))
.then(Identity.chain(async () => from(null)));from
function from<T>(value: T): Identity<T>;- Returns
Identitywhich contains value withTtype. Example:
const v1 = from(2); // Identity<number>
const v2 = from<2>(2); // Identity<2>isIdentity
function isIdentity<T>(value: unknown | Identity<T>): value is Identity<T>;- Returns
booleanif givenvalueis instance of Identity constructor. Example:
const value: unknown = 2;
if (isIdentity(value)) {
// ... value is Identity<unknown> at this block
}Identity#join
function join<V>(this: Identity<Identity<V>>): Identity<V>;this: Identity<Identity<V>>-Identityinstance which contains anotherIdentityinstance.- Returns unwrapped (inner)
Identity. Example:
const v = from(from(2));
v1.join(); // Identity with value 2Identity#map
function map<Val, NewVal>(fn: (val: Val) => NewVal): Identity<NewVal>;- Returns mapped by
fnfunction value wrapped withIdentity. Example:
const v = just(2);
const newVal = v.map(a => a.toString()); // Identity<string> with value "2"Identity#asyncMap
function asyncMap<Val, NewVal>(fn: (val: Val) => Promise<NewVal>): Promise<Identity<NewVal>>;- Returns
Promisewith mapped byfnfunction value wrapped withIdentityExample:
const v = from(2);
// Promise<Identity<string>> with value "2"
const newVal = v.asyncMap(a => Promise.resolve(a.toString()));Identity#apply
function apply<A, B>(this: Identity<(a: A) => B>, arg: Identity<A>): Identity<B>;
function apply<A, B>(this: Identity<A>, fn: Identity<(a: A) => B>): Identity<B>;this | fn- function wrapped by Identity, which should be applied to valueargarg | this- value which should be applied tofn- Returns mapped by
fnfunction value wrapped byIdentity. Example:
const v = from(2);
const fn = from((a: number) => a * 2);
const newVal1 = fn.apply(v); // Identity<number> with value 4
const newVal2 = v.apply(fn); // Identity<number> with value 4Identity#asyncApply
Async variant of Identity#apply
function asyncApply<A, B>(
this: Identity<(a: Promise<A> | A) => Promise<B>>,
arg: Identity<Promise<A> | A>
): Promise<Identity<B>>;
function asyncApply<A, B>(this: Identity<Promise<A> | A>, fn: Identity<(a: Promise<A> | A) => Promise<B>>): Promise<Identity<B>>;this | fn- function wrapped by Identity, which should be applied to valueargarg | this- value which should be applied tofn- Returns
Promisewith mapped byfnfunction value wrapped byIdentity. Example:
const v = from(2);
const fn = from((a: number) => Promise, resolve(a * 2));
const newVal1 = fn.apply(v); // Promise<Identity<number>> with value 4
const newVal2 = v.apply(fn); // Promise<Identity<number>> with value 4Identity#chain
function chain<Val, NewVal>(fn: (val: Val) => Identity<NewVal>): Identity<NewVal>;- Returns mapped by
fnfunction value wrapped byIdentityExample:
const v = from(2);
const newVal = v1.chain(a => from(a.toString())); // Identity<string> with value "2"Identity#asyncChain
function asyncChain<Val, NewVal>(fn: (val: Val) => Promise<Identity<NewVal>>): Promise<Identity<NewVal>>;- Returns
Promisewith mapped byfnfunction value wrapped withIdentity. Example:
const v = from(2);
// Promise<Identity<string>> with value "2"
const newVal = v.asyncChain(a => Promise.resolve(from(a.toString())));Helpers
// Value from Identity instance
const { value } = from(2); // numberconst value = from(2).unwrap(); // returns 2License
MIT (c) Artem Kobzar see LICENSE file.