import { _, $ } from '../fantasy/typeclasses' import { FunctorInstances } from '../fantasy/typeclasses/functor' export interface S_ { } export type Stream = keyof S_ export interface FantasySubject { next(a: A): void complete(a?: A): void } export interface Subscription { unsubscribe(): void; } export type Subject = $ & FantasySubject export type $ = $ export class StreamOps { } export interface StreamOps { empty(): $ fromPromise(p: Promise): $ from(fa: $): $ just(a: A): $ merge( a: $, b: $ ): $ scan( f: (acc: B, cur: A) => B, base: B, fa: $ ): $ map(f: (a: A) => B, fa: $): $ filter(f: (a: A) => boolean, fa: $): $ flatMap(f: (a: A) => $, fa: $): $ subject(): Subject combine( f: (a: A, b: B) => C, fa: $, fb: $ ): $ combine( f: (a: A, b: B, c: C) => D, fa: $, fb: $, fc: $ ): $ combine( f: (a: A, b: B, c: C, d: D) => E, fa: $, fb: $, fc: $, fd: $ ): $ combine( f: (a: A, b: B, c: C, d: D, e: E) => G, fa: $, fb: $, fc: $, fd: $, fe: $ ): $ combine( f: (a: A, b: B, c: C, d: D, e: E, g: G) => H, fa: $, fb: $, fc: $, fd: $, fe: $, fg: $ ): $ subscribe(fa: $, next: (v: A) => void, complete?: () => void): Subscription } export const streamOps: StreamOps = new StreamOps