fp-ts-std
Version:
The missing pseudo-standard library for fp-ts.
61 lines (60 loc) • 3.18 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.digits = exports.EnumInt = exports.BoundedSafe = exports.isNonPositive = exports.isNonNegative = exports.isNegative = exports.isPositive = exports.toFinite = exports.isFinite = exports.negate = exports.mod = exports.rem = exports.divide = exports.subtract = exports.multiply = exports.add = exports.decrement = exports.increment = exports.integerFromString = exports.floatFromString = exports.fromString = exports.fromStringWithRadix = exports.isValid = void 0;
const O = require("fp-ts/Option");
const Predicate_1 = require("fp-ts/Predicate");
const function_1 = require("fp-ts/function");
const A = require("fp-ts/Array");
const number_1 = require("fp-ts/number");
const Function_1 = require("./Function");
const L = require("./Lazy");
exports.isValid = (0, Predicate_1.not)(Number.isNaN);
const fromStringWithRadix = (radix) => (string) => (0, function_1.pipe)(Number.parseInt(string, radix), O.fromPredicate(exports.isValid));
exports.fromStringWithRadix = fromStringWithRadix;
exports.fromString = (0, function_1.flow)(Number, O.fromPredicate(exports.isValid));
exports.floatFromString = (0, function_1.flow)(Number.parseFloat, O.fromPredicate(exports.isValid));
exports.integerFromString = (0, exports.fromStringWithRadix)(10);
const increment = x => x + 1;
exports.increment = increment;
const decrement = x => x - 1;
exports.decrement = decrement;
const add = (x) => y => x + y;
exports.add = add;
const multiply = (x) => y => x * y;
exports.multiply = multiply;
const subtract = (subtrahend) => minuend => minuend - subtrahend;
exports.subtract = subtract;
const divide = (divisor) => dividend => dividend / divisor;
exports.divide = divide;
const rem = (divisor) => dividend => dividend % divisor;
exports.rem = rem;
const mod = (divisor) => dividend => ((dividend % divisor) + divisor) % divisor;
exports.mod = mod;
const negate = n => -n;
exports.negate = negate;
const isFinite = n => Math.abs(n) !== Number.POSITIVE_INFINITY;
exports.isFinite = isFinite;
exports.toFinite = (0, Function_1.unless)(exports.isFinite)(n => Math.sign(n) * Number.MAX_SAFE_INTEGER);
const isPositive = n => Math.sign(n) === 1;
exports.isPositive = isPositive;
const isNegative = n => Math.sign(n) === -1;
exports.isNegative = isNegative;
const isNonNegative = n => Math.sign(n) !== -1;
exports.isNonNegative = isNonNegative;
const isNonPositive = n => Math.sign(n) !== 1;
exports.isNonPositive = isNonPositive;
exports.BoundedSafe = {
...number_1.Bounded,
top: Number.MAX_SAFE_INTEGER,
bottom: Number.MIN_SAFE_INTEGER,
};
exports.EnumInt = {
...exports.BoundedSafe,
succ: (0, function_1.flow)(O.fromPredicate((0, Predicate_1.and)((n) => n < Number.MAX_SAFE_INTEGER)(Number.isInteger)), O.map(exports.increment)),
pred: (0, function_1.flow)(O.fromPredicate((0, Predicate_1.and)((n) => n > Number.MIN_SAFE_INTEGER)(Number.isInteger)), O.map(exports.decrement)),
toEnum: O.some,
fromEnum: function_1.identity,
cardinality: L.of(Number.POSITIVE_INFINITY),
};
const digits = (n) => (0, function_1.pipe)([...`${n}`], A.filterMap(exports.fromString));
exports.digits = digits;
;