@typed/fp
Version:
Data Structures and Resources for fp-ts
422 lines • 8.15 kB
JavaScript
import * as E from 'fp-ts/Either';
import * as FEi from 'fp-ts/FromEither';
import * as FIO from 'fp-ts/FromIO';
import * as FR from 'fp-ts/FromReader';
import * as FS from 'fp-ts/FromState';
import * as FT from 'fp-ts/FromTask';
import { pipe } from 'fp-ts/function';
import * as ST from 'fp-ts/StateT';
import * as EE from './EnvEither';
import * as FE from './FromEnv';
import * as FRe from './FromResume';
import * as R from './Resume';
/**
* @since 0.9.2
* @category Combinator
*/
export const ap = ST.ap(EE.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const chain = ST.chain(EE.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const evaluate = ST.evaluate(EE.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const execute = ST.execute(EE.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromEnvEither = ST.fromF(EE.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromState = ST.fromState(EE.Pointed);
/**
* @since 0.9.2
* @category Combinator
*/
export const map = ST.map(EE.Functor);
/**
* @since 0.9.2
* @category Constructor
*/
export const of = ST.of(EE.Pointed);
/**
* @since 0.9.2
* @category URI
*/
export const URI = '@typed/fp/StateEnvEither';
/**
* @since 0.9.2
* @category Instance
*/
export const Pointed = {
of,
};
/**
* @since 0.9.2
* @category Instance
*/
export const Functor = {
map,
};
/**
* @since 0.9.2
* @category Instance
*/
export const Apply = {
...Functor,
ap,
};
/**
* @since 0.9.2
* @category Instance
*/
export const Applicative = {
...Apply,
...Pointed,
};
/**
* @since 0.9.2
* @category Instance
*/
export const Chain = {
...Functor,
chain,
};
/**
* @since 0.9.2
* @category Instance
*/
export const Monad = {
...Chain,
...Pointed,
};
/**
* @since 0.9.2
* @category Combinator
*/
export 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 pipe(resume, R.chain((e) => E.isLeft(e)
? R.of(e)
: pipe(e.right[0], E.matchW((a) => chainRec(f)(a)(e.right[1])(r), (b) => R.of(E.right([b, e.right[1]]))))));
};
/**
* @since 0.9.2
* @category Instance
*/
export const ChainRec = {
chainRec,
};
/**
* @since 0.9.2
* @category Instance
*/
export const MonadRec = {
...Monad,
chainRec,
};
/**
* @since 0.9.2
* @category Constructor
*/
export const fromEither = (either) => fromEnvEither(EE.fromEither(either));
/**
* @since 0.9.2
* @category Instance
*/
export const FromEither = {
fromEither,
};
/**
* @since 0.9.2
* @category Constructor
*/
export const fromIO = (io) => fromEnvEither(EE.fromIO(io));
/**
* @since 0.9.2
* @category Instance
*/
export const FromIO = {
fromIO,
};
/**
* @since 0.9.2
* @category Constructor
*/
export const fromTask = (io) => fromEnvEither(EE.fromTask(io));
/**
* @since 0.9.2
* @category Instance
*/
export const FromTask = {
...FromIO,
fromTask,
};
/**
* @since 0.9.2
* @category Constructor
*/
export const fromResume = (resume) => fromEnvEither(EE.fromResume(resume));
/**
* @since 0.9.2
* @category Instance
*/
export const FromResume = {
fromResume,
};
/**
* @since 0.9.2
* @category Constructor
*/
export const fromEnv = (env) => fromEnvEither(EE.fromEnv(env));
/**
* @since 0.9.2
* @category Instance
*/
export const FromEnv = {
fromEnv,
};
/**
* @since 0.9.2
* @category Instance
*/
export const FromState = {
fromState,
};
/**
* @since 0.9.2
* @category Constructor
*/
export const fromReader = (reader) => fromEnvEither(EE.fromReader(reader));
/**
* @since 0.9.2
* @category Instance
*/
export const FromReader = { fromReader };
/**
* @since 0.9.2
* @category Constructor
*/
export const ask = FR.ask(FromReader);
/**
* @since 0.9.2
* @category Constructor
*/
export const asks = FR.asks(FromReader);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainReaderK = FR.chainReaderK(FromReader, Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromReaderK = FR.fromReaderK(FromReader);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainFirstResumeK = FRe.chainFirstResumeK(FromResume, Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainResumeK = FRe.chainResumeK(FromResume, Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromResumeK = FRe.fromResumeK(FromResume);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainEnvK = FE.chainEnvK(FromEnv, Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainFirstEnvK = FE.chainFirstEnvK(FromEnv, Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromEnvK = FE.fromEnvK(FromEnv);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainFirstTaskK = FT.chainFirstTaskK(FromTask, Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainTaskK = FT.chainTaskK(FromTask, Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromTaskK = FT.fromTaskK(FromTask);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainFirstIOK = FIO.chainFirstIOK(FromTask, Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainIOK = FIO.chainIOK(FromTask, Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromIOK = FIO.fromIOK(FromTask);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainEitherK = FEi.chainEitherK(FromEither, Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainOptionK = FEi.chainOptionK(FromEither, Chain);
/**
* @since 0.9.2
* @category Combinator
*/
export const filterOrElse = FEi.filterOrElse(FromEither, Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromEitherK = FEi.fromEitherK(FromEither);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromOption = FEi.fromOption(FromEither);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromOptionK = FEi.fromOptionK(FromEither);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromPredicate = FEi.fromPredicate(FromEither);
/**
* @since 0.9.2
* @category Combinator
*/
export const chainStateK = FS.chainStateK(FromState, Chain);
/**
* @since 0.9.2
* @category Constructor
*/
export const fromStateK = FS.fromStateK(FromState);
/**
* @since 0.9.2
* @category Constructor
*/
export const get = FS.get(FromState);
/**
* @since 0.9.2
* @category Constructor
*/
export const gets = FS.gets(FromState);
/**
* @since 0.9.2
* @category Combinator
*/
export const modify = FS.modify(FromState);
/**
* @since 0.9.2
* @category Combinator
*/
export const put = FS.put(FromState);
/**
* @since 0.9.2
* @category Combinator
*/
export const useSome = (provided) => (srte) => (s) => (r) => srte(s)({ ...r, ...provided });
/**
* @since 0.9.2
* @category Combinator
*/
export const provideSome = (provided) => (srte) => (s) => (r) => srte(s)({ ...provided, ...r });
/**
* @since 0.9.2
* @category Combinator
*/
export const useAll = (provided) => (srte) => (s) => () => srte(s)(provided);
/**
* @since 0.9.2
* @category Combinator
*/
export const provideAll = (provided) => (srte) => (s) => (r) => srte(s)({ ...provided, ...r });
/**
* @since 0.9.2
* @category Instance
*/
export const UseSome = {
useSome,
};
/**
* @since 0.9.2
* @category Instance
*/
export const UseAll = {
useAll,
};
/**
* @since 0.9.2
* @category Instance
*/
export const ProvideSome = {
provideSome,
};
/**
* @since 0.9.2
* @category Instance
*/
export const ProvideAll = {
provideAll,
};
/**
* @since 0.9.2
* @category Instance
*/
export const Provide = {
useSome,
useAll,
provideSome,
provideAll,
};
//# sourceMappingURL=StateEnvEither.js.map