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: () => T): IComputationNode; makeComputationNode(fn: (val: T) => T, seed: T): IComputationNode; } export interface DataSignal { (): T; (val: T): T; } declare var S: S; export default S; export interface IDataNode { clock(): IClock; current(): T; next(value: T): T; } export interface IComputationNode { clock(): IClock; current(): T; } export interface IClock { time(): number; }