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