export interface S { root(fn: (dispose?: () => void) => T): T; (fn: () => T): () => T; (fn: (v: T) => T, seed: T): () => T; on(ev: () => any, fn: () => T): () => T; on(ev: () => any, fn: (v: T) => T, seed: T, onchanges?: boolean): () => T; effect(fn: () => T): void; effect(fn: (v: T) => T, seed: T): void; data(value: T): DataSignal; value(value: T, eq?: (a: T, b: T) => boolean): DataSignal; freeze(fn: () => T): T; sample(fn: () => T): T; cleanup(fn: (final: boolean) => any): void; isFrozen(): boolean; isListening(): boolean; makeDataNode(value: T): IDataNode; makeComputationNode(fn: (val: S) => T, seed: S, orphan: boolean, sample: true): { node: INode | null; value: T; }; makeComputationNode(fn: (val: T | S) => T, seed: S, orphan: boolean, sample: boolean): { node: INode | null; value: T; }; disposeNode(node: INode): void; dontWarn(): void; } export interface DataSignal { (): T; (val: T): T; } declare var S: S; export default S; export interface IClock { time(): number; } interface INode { clock(): IClock; current(): T; } interface IDataNode extends INode { next(value: T): T; } export { INode as Node, IDataNode as DataNode, IClock as Clock };