@eeue56/ts-core
Version:
Core library for TypeScript inspired by Elm
141 lines • 6.79 kB
JavaScript
import * as Maybe from './maybe';
/*
Creates an Ok value
*/
export function Ok(value) {
return {
kind: 'Ok',
value: value,
};
}
/*
Creates an Err value
*/
export function Err(error) {
return {
kind: 'Err',
error: error,
};
}
/*
If result is Ok, return the value inside it.
Otherwise return the default value provided;
*/
export function withDefault(value, result) {
switch (result.kind) {
case 'Ok':
return result.value;
default:
return value;
}
}
/*
When both error and Ok are the same value,
return the inner value of whichever is contained.
*/
export function either(result) {
switch (result.kind) {
case 'Ok':
return result.value;
default:
return result.error;
}
}
/*
Turns Ok into Just, Err into Nothing
*/
export function toMaybe(result) {
switch (result.kind) {
case 'Ok':
return Maybe.Just(result.value);
default:
return Maybe.Nothing();
}
}
/*
Turns Just into Ok, Nothing into Err with the default value provided.
*/
export function fromMaybe(error, maybe) {
switch (maybe.kind) {
case 'Just':
return Ok(maybe.value);
default:
return Err(error);
}
}
/*
If result is Ok, apply a function to it and return a Ok containing the new value.
Otherwise return Err.
*/
export function map(func, result) {
switch (result.kind) {
case 'Ok':
return Ok(func(result.value));
default:
return result;
}
}
/*
If all results are Ok, apply a function to them and return a Ok containing the new value.
Otherwise return the first Err encountered.
*/
export function map2(func, firstResult, secondResult) {
switch (firstResult.kind) {
case 'Ok':
switch (secondResult.kind) {
case 'Ok':
return Ok(func(firstResult.value, secondResult.value));
default:
return secondResult;
}
default:
return firstResult;
}
}
/*
If all results are Ok, apply a function to them and return a Ok containing the new value.
Otherwise return the first Err encountered.
*/
export function map3(func, firstResult, secondResult, thirdResult) {
switch (firstResult.kind) {
case 'Ok':
switch (secondResult.kind) {
case 'Ok':
switch (thirdResult.kind) {
case 'Ok':
return Ok(func(firstResult.value, secondResult.value, thirdResult.value));
default:
return thirdResult;
}
default:
return secondResult;
}
default:
return firstResult;
}
}
/*
If result is Err, apply a function to it and return a Err containing the new value.
Otherwise return Ok.
*/
export function mapError(func, result) {
switch (result.kind) {
case 'Err':
return Err(func(result.error));
default:
return result;
}
}
/*
If the result is Ok, apply a function that turns things into a result to it.
Otherwise return Err.
*/
export function andThen(func, result) {
switch (result.kind) {
case 'Ok':
return func(result.value);
default:
return result;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxTQUFTLENBQUM7QUFjakM7O0VBRUU7QUFDRixNQUFNLFVBQVUsRUFBRSxDQUFlLEtBQVk7SUFDekMsT0FBTztRQUNILElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLEtBQUs7S0FDZixDQUFDO0FBQ04sQ0FBQztBQUVEOztFQUVFO0FBQ0YsTUFBTSxVQUFVLEdBQUcsQ0FBZSxLQUFZO0lBQzFDLE9BQU87UUFDSCxJQUFJLEVBQUUsS0FBSztRQUNYLEtBQUssRUFBRSxLQUFLO0tBQ2YsQ0FBQztBQUNOLENBQUM7QUFFRDs7O0VBR0U7QUFDRixNQUFNLFVBQVUsV0FBVyxDQUN2QixLQUFZLEVBQ1osTUFBNEI7SUFFNUIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ2pCLEtBQUssSUFBSTtZQUNMLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztRQUV4QjtZQUNJLE9BQU8sS0FBSyxDQUFDO0tBQ3BCO0FBQ0wsQ0FBQztBQUVEOzs7RUFHRTtBQUNGLE1BQU0sVUFBVSxNQUFNLENBQUksTUFBb0I7SUFDMUMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ2pCLEtBQUssSUFBSTtZQUNMLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN4QjtZQUNJLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztLQUMzQjtBQUNMLENBQUM7QUFFRDs7RUFFRTtBQUNGLE1BQU0sVUFBVSxPQUFPLENBQ25CLE1BQTRCO0lBRTVCLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNqQixLQUFLLElBQUk7WUFDTCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDO1lBQ0ksT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENB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