@typed/fp
Version:
Data Structures and Resources for fp-ts
61 lines • 1.79 kB
JavaScript
/**
* DataT is a collection of transformers than can lift your effect types
* to use Data to represent asynchronous loading.
* @since 0.9.2
*/
import * as Apply from 'fp-ts/Apply';
import { flow, pipe } from 'fp-ts/function';
import * as Functor from 'fp-ts/Functor';
import * as D from './Data';
export function noData(P) {
return P.of(D.noData);
}
export function loading(P) {
return P.of(D.loading);
}
export function fromProgress(P) {
return flow(D.fromProgress, P.of);
}
export function refresh(P) {
return flow(D.refresh, P.of);
}
export function replete(P) {
return flow(D.replete, P.of);
}
export function repleteF(F) {
return F.map(D.replete);
}
export function map(F) {
return Functor.map(F, D.Functor);
}
export function ap(F) {
return Apply.ap(F, D.Apply);
}
export function chain(M) {
return (f) => (fa) => pipe(fa, M.chain((data) => (D.hasValue(data) ? f(data.value) : M.of(data))));
}
export function alt(M) {
return (second) => M.chain((e) => (D.hasValue(e) ? M.of(e) : second()));
}
export function match(F) {
return flow(D.match, F.map);
}
export function matchW(F) {
return flow(D.matchW, F.map);
}
export function match3W(F) {
return flow(D.match3W, F.map);
}
export function matchE(C) {
return (onNoData, onLoading, onRefresh, onReplete) => (data) => pipe(data, C.chain(D.matchW(onNoData, onLoading, onRefresh, onReplete)));
}
export function matchEW(C) {
return (onNoData, onLoading, onRefresh, onReplete) => (data) => pipe(data, C.chain(D.matchW(onNoData, onLoading, onRefresh, onReplete)));
}
export function getOrElse(F) {
return flow(D.getOrElse, F.map);
}
export function getOrElseW(F) {
return (onData, onLoading) => F.map(D.getOrElseW(onData, onLoading));
}
//# sourceMappingURL=DataT.js.map