import { pipe } from 'fp-ts/function' import * as IO from 'fp-ts/IO' import * as RT from 'fp-ts/ReaderTask' import * as T from 'fp-ts/Task' import * as $S from './struct' export const pick = () => (k: K) => RT.asks, Pick[K]>($S.lookup(k)) export const picks = () => ( k: K, f: (r: Pick[K]) => RT.ReaderTask, B>, ) => picksW()(k, f) export const picksW = () => ( k: K, f: (r: Pick[K]) => RT.ReaderTask, ) => pipe(pick()(k), RT.chainW(f)) export const picksIOK = () => (k: K, f: (r: Pick[K]) => IO.IO) => picks()(k, RT.fromIOK(f)) export const picksTaskK = () => (k: K, f: (r: Pick[K]) => T.Task) => picks()(k, RT.fromTaskK(f))