@typed/fp
Version:
Data Structures and Resources for fp-ts
438 lines • 10.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.filterOrElse = exports.chainOptionK = exports.chainEitherK = exports.fromIOK = exports.chainIOK = exports.chainFirstIOK = exports.fromTaskK = exports.chainTaskK = exports.chainFirstTaskK = exports.fromEnvK = exports.chainFirstEnvK = exports.chainEnvK = exports.fromResumeK = exports.chainResumeK = exports.chainFirstResumeK = exports.fromReaderK = exports.chainReaderK = exports.asks = exports.ask = exports.FromReader = exports.fromReader = exports.FromState = exports.FromEnv = exports.fromEnv = exports.FromResume = exports.fromResume = exports.FromTask = exports.fromTask = exports.FromIO = exports.fromIO = exports.FromEither = exports.fromEither = exports.MonadRec = exports.ChainRec = exports.chainRec = exports.Monad = exports.Chain = exports.Applicative = exports.Apply = exports.Functor = exports.Pointed = exports.URI = exports.of = exports.map = exports.fromState = exports.fromEnvEither = exports.execute = exports.evaluate = exports.chain = exports.ap = void 0;
exports.Provide = exports.ProvideAll = exports.ProvideSome = exports.UseAll = exports.UseSome = exports.provideAll = exports.useAll = exports.provideSome = exports.useSome = exports.put = exports.modify = exports.gets = exports.get = exports.fromStateK = exports.chainStateK = exports.fromPredicate = exports.fromOptionK = exports.fromOption = exports.fromEitherK = void 0;
const tslib_1 = require("tslib");
const E = (0, tslib_1.__importStar)(require("fp-ts/Either"));
const FEi = (0, tslib_1.__importStar)(require("fp-ts/FromEither"));
const FIO = (0, tslib_1.__importStar)(require("fp-ts/FromIO"));
const FR = (0, tslib_1.__importStar)(require("fp-ts/FromReader"));
const FS = (0, tslib_1.__importStar)(require("fp-ts/FromState"));
const FT = (0, tslib_1.__importStar)(require("fp-ts/FromTask"));
const function_1 = require("fp-ts/function");
const ST = (0, tslib_1.__importStar)(require("fp-ts/StateT"));
const EE = (0, tslib_1.__importStar)(require("./EnvEither"));
const FE = (0, tslib_1.__importStar)(require("./FromEnv"));
const FRe = (0, tslib_1.__importStar)(require("./FromResume"));
const R = (0, tslib_1.__importStar)(require("./Resume"));
/**
* @since 0.9.2
* @category Combinator
*/
exports.ap = ST.ap(EE.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chain = ST.chain(EE.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.evaluate = ST.evaluate(EE.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.execute = ST.execute(EE.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromEnvEither = ST.fromF(EE.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromState = ST.fromState(EE.Pointed);
/**
* @since 0.9.2
* @category Combinator
*/
exports.map = ST.map(EE.Functor);
/**
* @since 0.9.2
* @category Constructor
*/
exports.of = ST.of(EE.Pointed);
/**
* @since 0.9.2
* @category URI
*/
exports.URI = '@typed/fp/StateEnvEither';
/**
* @since 0.9.2
* @category Instance
*/
exports.Pointed = {
of: exports.of,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Functor = {
map: exports.map,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Apply = {
...exports.Functor,
ap: exports.ap,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Applicative = {
...exports.Apply,
...exports.Pointed,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Chain = {
...exports.Functor,
chain: exports.chain,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Monad = {
...exports.Chain,
...exports.Pointed,
};
/**
* @since 0.9.2
* @category Combinator
*/
const chainRec = (f) => (value) => (s) => (r) => {
let resume = f(value)(s)(r);
while (R.isSync(resume)) {
const either = resume.resume();
if (E.isLeft(either)) {
return R.of(either);
}
const result = either.right;
s = result[1];
if (E.isRight(result[0])) {
return R.of(E.right([result[0].right, s]));
}
resume = f(result[0].left)(s)(r);
}
return (0, function_1.pipe)(resume, R.chain((e) => E.isLeft(e)
? R.of(e)
: (0, function_1.pipe)(e.right[0], E.matchW((a) => (0, exports.chainRec)(f)(a)(e.right[1])(r), (b) => R.of(E.right([b, e.right[1]]))))));
};
exports.chainRec = chainRec;
/**
* @since 0.9.2
* @category Instance
*/
exports.ChainRec = {
chainRec: exports.chainRec,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.MonadRec = {
...exports.Monad,
chainRec: exports.chainRec,
};
/**
* @since 0.9.2
* @category Constructor
*/
const fromEither = (either) => (0, exports.fromEnvEither)(EE.fromEither(either));
exports.fromEither = fromEither;
/**
* @since 0.9.2
* @category Instance
*/
exports.FromEither = {
fromEither: exports.fromEither,
};
/**
* @since 0.9.2
* @category Constructor
*/
const fromIO = (io) => (0, exports.fromEnvEither)(EE.fromIO(io));
exports.fromIO = fromIO;
/**
* @since 0.9.2
* @category Instance
*/
exports.FromIO = {
fromIO: exports.fromIO,
};
/**
* @since 0.9.2
* @category Constructor
*/
const fromTask = (io) => (0, exports.fromEnvEither)(EE.fromTask(io));
exports.fromTask = fromTask;
/**
* @since 0.9.2
* @category Instance
*/
exports.FromTask = {
...exports.FromIO,
fromTask: exports.fromTask,
};
/**
* @since 0.9.2
* @category Constructor
*/
const fromResume = (resume) => (0, exports.fromEnvEither)(EE.fromResume(resume));
exports.fromResume = fromResume;
/**
* @since 0.9.2
* @category Instance
*/
exports.FromResume = {
fromResume: exports.fromResume,
};
/**
* @since 0.9.2
* @category Constructor
*/
const fromEnv = (env) => (0, exports.fromEnvEither)(EE.fromEnv(env));
exports.fromEnv = fromEnv;
/**
* @since 0.9.2
* @category Instance
*/
exports.FromEnv = {
fromEnv: exports.fromEnv,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.FromState = {
fromState: exports.fromState,
};
/**
* @since 0.9.2
* @category Constructor
*/
const fromReader = (reader) => (0, exports.fromEnvEither)(EE.fromReader(reader));
exports.fromReader = fromReader;
/**
* @since 0.9.2
* @category Instance
*/
exports.FromReader = { fromReader: exports.fromReader };
/**
* @since 0.9.2
* @category Constructor
*/
exports.ask = FR.ask(exports.FromReader);
/**
* @since 0.9.2
* @category Constructor
*/
exports.asks = FR.asks(exports.FromReader);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainReaderK = FR.chainReaderK(exports.FromReader, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromReaderK = FR.fromReaderK(exports.FromReader);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstResumeK = FRe.chainFirstResumeK(exports.FromResume, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainResumeK = FRe.chainResumeK(exports.FromResume, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromResumeK = FRe.fromResumeK(exports.FromResume);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainEnvK = FE.chainEnvK(exports.FromEnv, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstEnvK = FE.chainFirstEnvK(exports.FromEnv, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromEnvK = FE.fromEnvK(exports.FromEnv);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstTaskK = FT.chainFirstTaskK(exports.FromTask, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainTaskK = FT.chainTaskK(exports.FromTask, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromTaskK = FT.fromTaskK(exports.FromTask);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstIOK = FIO.chainFirstIOK(exports.FromTask, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainIOK = FIO.chainIOK(exports.FromTask, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromIOK = FIO.fromIOK(exports.FromTask);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainEitherK = FEi.chainEitherK(exports.FromEither, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainOptionK = FEi.chainOptionK(exports.FromEither, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.filterOrElse = FEi.filterOrElse(exports.FromEither, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromEitherK = FEi.fromEitherK(exports.FromEither);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromOption = FEi.fromOption(exports.FromEither);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromOptionK = FEi.fromOptionK(exports.FromEither);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromPredicate = FEi.fromPredicate(exports.FromEither);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainStateK = FS.chainStateK(exports.FromState, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromStateK = FS.fromStateK(exports.FromState);
/**
* @since 0.9.2
* @category Constructor
*/
exports.get = FS.get(exports.FromState);
/**
* @since 0.9.2
* @category Constructor
*/
exports.gets = FS.gets(exports.FromState);
/**
* @since 0.9.2
* @category Combinator
*/
exports.modify = FS.modify(exports.FromState);
/**
* @since 0.9.2
* @category Combinator
*/
exports.put = FS.put(exports.FromState);
/**
* @since 0.9.2
* @category Combinator
*/
const useSome = (provided) => (srte) => (s) => (r) => srte(s)({ ...r, ...provided });
exports.useSome = useSome;
/**
* @since 0.9.2
* @category Combinator
*/
const provideSome = (provided) => (srte) => (s) => (r) => srte(s)({ ...provided, ...r });
exports.provideSome = provideSome;
/**
* @since 0.9.2
* @category Combinator
*/
const useAll = (provided) => (srte) => (s) => () => srte(s)(provided);
exports.useAll = useAll;
/**
* @since 0.9.2
* @category Combinator
*/
const provideAll = (provided) => (srte) => (s) => (r) => srte(s)({ ...provided, ...r });
exports.provideAll = provideAll;
/**
* @since 0.9.2
* @category Instance
*/
exports.UseSome = {
useSome: exports.useSome,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.UseAll = {
useAll: exports.useAll,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.ProvideSome = {
provideSome: exports.provideSome,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.ProvideAll = {
provideAll: exports.provideAll,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Provide = {
useSome: exports.useSome,
useAll: exports.useAll,
provideSome: exports.provideSome,
provideAll: exports.provideAll,
};
//# sourceMappingURL=StateEnvEither.js.map