import { deriveDo } from "@principia/prelude"; import { succeed } from "./constructors"; import type { Async } from "./model"; import { Monad } from "./monad"; /* * ------------------------------------------- * Do Async * ------------------------------------------- */ export const Do = deriveDo(Monad); const of: Async = succeed({}); export { of as do }; export const letS: ( name: Exclude, f: (_: K) => A ) => ( mk: Async ) => Async< R, E, { [k in N | keyof K]: k extends keyof K ? K[k] : A; } > = Do.letS; export const bindS: ( name: Exclude, f: (_: K) => Async ) => ( mk: Async ) => Async< R & R2, E | E2, { [k in N | keyof K]: k extends keyof K ? K[k] : A; } > = Do.bindS; export const bindToS: ( name: Exclude ) => (fa: Async) => Async]: A }> = Do.bindToS;