// Reason Helper Types: interface ListNode { [0]: T, [1]: 0 | List } export type List = ListNode | 0; // Wonka Types: export type Talkback = 0 | 1; export type Signal = | { tag: 0, [0]: (talkback: Talkback) => void } | { tag: 1, [0]: A } | 0; export interface Sink { (signal: Signal): void; } export interface Source { (sink: Sink): void; } export interface Operator { (source: Source): Source; } export type Subscription = [() => void]; export type Observer = [(value: A) => void, () => void]; export type Subject = [Source, (value: A) => void, () => void];