import { unit, Unit } from "../../../fun/domains/unit/state"; import { BasicUpdater, Updater } from "../../../fun/domains/updater/state"; import { BasicFun, Fun } from "../../../fun/state"; export type Maybe = e | undefined; export const Maybe = { Default: (_: e | undefined) => _, Updaters: { value: (_: BasicUpdater): Updater> => Updater(Maybe.Operations.map(_)), ensureValue: (_: BasicFun): Updater> => Updater((__) => (__ != undefined ? __ : _(unit))), }, Operations: { map: (f: BasicFun): Fun, Maybe> => Fun, Maybe>((_) => _ != undefined ? Maybe.Default(f(_)) : Maybe.Default(undefined), ), }, };