import { Environment } from "../world"; import { Expression, Metadata, Statement, Type } from "../ir"; import { Predicate } from "../logic"; import { Machine, Mark, State } from "../vm"; import { CrochetThunk, CrochetValue } from "../primitives"; import { Bag } from "../../utils"; import { FunctionLayer } from "../logic/layer"; export declare class When { readonly meta: Metadata; readonly predicate: Predicate; readonly env: Environment; readonly body: Statement[]; constructor(meta: Metadata, predicate: Predicate, env: Environment, body: Statement[]); get full_name(): string; executions(state: State): Machine[]; } export declare type ReadyAction = { action: Action; title: CrochetThunk; score: CrochetThunk; tags: CrochetValue[]; machine: Machine; }; export declare class Action { readonly meta: Metadata; readonly title: Expression; readonly predicate: Predicate; readonly tags: CrochetValue[]; readonly env: Environment; readonly rank: Expression; readonly body: Statement[]; readonly for_type: Type; private fired_for; constructor(meta: Metadata, title: Expression, predicate: Predicate, tags: CrochetValue[], env: Environment, rank: Expression, body: Statement[], for_type: Type); ready_actions(actor: CrochetValue, state0: State): ReadyAction[]; fire(actor: CrochetValue): void; get layer(): FunctionLayer; } export declare class ContextBag extends Bag { constructor(); get concrete_contexts(): ConcreteContext[]; } export declare abstract class Context { add_action(action: Action): void; add_event(event: When): void; abstract available_actions(actor: CrochetValue, state: State): ReadyAction[]; abstract available_events(state: State): Mark[]; } export declare class ConcreteContext { readonly meta: Metadata; readonly name: string; readonly events: When[]; readonly actions: Action[]; constructor(meta: Metadata, name: string); add_action(action: Action): void; add_event(event: When): void; available_actions(actor: CrochetValue, state: State): ReadyAction[]; available_events(state: State): Mark[]; } export declare class AnyContext extends Context { static instance: AnyContext; available_actions(actor: CrochetValue, state: State): ReadyAction[]; available_events(state: State): Mark[]; }