export declare type Task = Succeed | Fail | Binding | Chain | OnError | Receive; interface Succeed { readonly $: '_TASK__SUCCEED_'; readonly __value: T; } export declare const succeed: (value: T) => Task; interface Fail { readonly $: '_TASK__FAIL_'; readonly __error: E; } export declare const fail: (error: E) => Task; interface Binding { readonly $: '_TASK__BINDING'; __kill: void | (() => void); __callback(bind: (task: Task) => void): void | (() => void); } export declare const binding: (callback: (done: (task: Task) => void) => void | (() => void)) => Task; interface Chain { readonly $: '_TASK__CHAIN_'; readonly __task: Task; __callback(value: T): Task; } export declare const chain: (callback: (value: T) => Task, task: Task) => Task; interface OnError { readonly $: '_TASK__ON_ERROR_'; readonly __task: Task; __callback(error: E): Task; } export declare const onError: (callback: (error: E) => Task, task: Task) => Task; interface Receive { readonly $: '_TASK__RECEIVE_'; __callback(msg: M): Task; } export declare const receive: (callback: (msg: M) => Task) => Task; declare type Stack = Head | Ok | Err; interface Head { readonly $: '_STACK_HEAD_'; } interface Ok { readonly $: '_STACK_OK_'; readonly __next: Stack; __callback(value: T): Task; } interface Err { readonly $: '_STACK_ERR_'; readonly __next: Stack; __callback(error: E): Task; } export interface Process { __root?: Task; __stack: Stack; readonly __mailbox: Array; } export declare const rawSpawn: (task: Task) => Process; export declare const spawn: (task: Task) => Task>; export declare const rawSend: (proc: Process, msg: M) => void; export declare const send: (proc: Process, msg: M) => Task; export declare const kill: (proc: Process) => Task; export {};