import { Map, Collection, OrderedMap } from "immutable"; import { Sum } from "../collections/domains/sum/state"; import { Unit } from "../fun/domains/unit/state"; import { BasicUpdater } from "../fun/domains/updater/state"; import { BasicFun } from "../fun/state"; import { Guid, SimpleCallback } from "../../main"; export type DeltaT = number; export type Coroutine = { ([context, deltaT]: [context, DeltaT]): CoroutineStep; embed: (narrow: BasicFun, widen: BasicFun, BasicUpdater>) => Coroutine; then: (f: BasicFun>) => Coroutine; seq: (k: Coroutine) => Coroutine; }; export declare const Coroutine: { Create: (p: BasicFun<[context, DeltaT], CoroutineStep>) => Coroutine; UpdateState: (stateUpdater: BasicFun>) => Coroutine; SetState: (stateUpdater: BasicUpdater) => Coroutine; GetState: () => Coroutine; Start: () => Coroutine; Return: (result: result) => Coroutine; Yield: (next: Coroutine) => Coroutine; Waiting: (msLeft: number, next: Coroutine) => Coroutine; MapContext: (p: Coroutine, narrow: BasicFun) => Coroutine; Embed: (p: Coroutine, narrow: BasicFun, widen: BasicFun, BasicUpdater>) => Coroutine; MapState: (p: Coroutine, f: BasicFun, BasicUpdater>) => Coroutine; Tick: (context: context, p: Coroutine, deltaT: number) => { kind: "continuing"; excludeOthers?: true; state: BasicUpdater | undefined; next: Coroutine; } | { kind: "done"; state: BasicUpdater | undefined; result: result; }; Nothing: () => Coroutine; Any: (ps: Array>) => Coroutine; All: (ps: Array>) => Coroutine>; Repeat: (p: Coroutine) => Coroutine; Seq: (ps: Array>) => Coroutine; For: (collection: Collection, p: BasicFun>) => Coroutine; While: (predicate: BasicFun<[context], boolean>, p: Coroutine) => Coroutine; Wait: (ms: number) => Coroutine; Await: (promise: BasicFun>, onCatch: BasicFun, debugName?: string) => Coroutine>; On: >; }, state extends { inboundEvents: Map>; }, matchedEvent extends InboundKindFromContext>(kind: matchedEvent, filter?: BasicFun<[InboundEventFromContext & { kind: matchedEvent; }, context & state], boolean>) => Coroutine & { kind: matchedEvent; }>; Trigger: >; }, event extends { id: Guid; kind: kind; }, kind extends string>(event: event) => Coroutine; Do: (action: SimpleCallback) => Coroutine; }; export type CoroutineStep = { newState: BasicUpdater | undefined; } & ({ kind: "result"; result: result; } | { kind: "then"; p: Coroutine; k: BasicFun>; } | { kind: "yield"; next: Coroutine; } | { kind: "waiting"; msLeft: number; next: Coroutine; }) & {}; export declare const CoroutineStep: { Result: (newState: BasicUpdater | undefined, result: result) => CoroutineStep; Then: (newState: BasicUpdater | undefined, p: Coroutine, k: BasicFun>) => CoroutineStep; Yield: (newState: BasicUpdater | undefined, next: Coroutine) => CoroutineStep; Waiting: (newState: BasicUpdater | undefined, msLeft: number, next: Coroutine) => CoroutineStep; MapContext: (p: CoroutineStep, narrow: BasicFun) => CoroutineStep; MapState: (p: CoroutineStep, f: BasicFun, BasicUpdater>) => CoroutineStep; Embed: (p: CoroutineStep, narrow: BasicFun, widen: BasicFun, BasicUpdater>) => CoroutineStep; }; export type InboundEventFromContext = s extends { inboundEvents: Map>; } ? event : never; export type InboundKindFromContext = s extends { inboundEvents: Map>; } ? kind : never; //# sourceMappingURL=state.d.ts.map