import * as T from "../../Task/_core"; import { makeContinue, makeDone } from "./constructors"; import type { Decision, StepFunction } from "./Decision"; import { map_ } from "./methods"; export const contramapIn_ = (fa: Decision, f: (i: I1) => I): Decision => { switch (fa._tag) { case "Done": return fa; case "Continue": return makeContinue(fa.out, fa.interval, (n, i) => T.map_(fa.next(n, f(i)), (a) => contramapIn_(a, f))); } }; export const contramapIn = (f: (i: I1) => I) => (fa: Decision): Decision => contramapIn_(fa, f); export const as_ = (fa: Decision, o: O1): Decision => map_(fa, () => o); export const as = (o: O1) => (fa: Decision): Decision => as_(fa, o); export const done = (a: A): StepFunction => () => T.pure(makeDone(a));