import {ThrottleStream} from "lstream/throttle"; interface Observable { attach(callback: (value: T) => any): () => void } interface Stream extends Observable { map(fn: (value: T) => V); filter(predicate: (T) => boolean): Stream; pairwise(first?: T): Stream<[T, T]>; scan(seed: R, scanFn: (accum: R, current: T) => R): Stream; remember(initialValue: T, usingStream?: any): StateStream distinct(): Stream; throttle(delay?: number, accumulator?: any): ThrottleStream; pipe(otherStream): () => void; } interface Emitter extends Stream { next(value?: T) : void; } interface StateStream extends Emitter { value: T; update(updater: (T) => T): void; mutate(mutator: (T) => void): void; } export function stream(): Emitter; export function eventStream(): Emitter; export function combine(...streams: Stream[]): Stream; export function merge(...streams: Stream[]): Stream; export function state(initialValue: T): StateStream; export function distinctState(initialValue: T): StateStream; export function externalState(get: any, set: any): StateStream; export function never(): Emitter export function constant(value: T): Stream export function map(stream: Stream, fn: (T) => V): Stream; export function filter(stream: Stream, predicate: (T) => boolean): Stream;