1// Reason Helper Types:
2
3interface ListNode<T> {
4 [0]: T,
5 [1]: 0 | List<T>
6}
7
8export type List<T> = ListNode<T> | 0;
9
10// Wonka Types:
11
12export type Talkback = 0 | 1;
13
14export type Signal<A> =
15 | { tag: 0, [0]: (talkback: Talkback) => void }
16 | { tag: 1, [0]: A }
17 | 0;
18
19export interface Sink<A> { (signal: Signal<A>): void; }
20export interface Source<A> { (sink: Sink<A>): void; }
21export interface Operator<A, B> { (source: Source<A>): Source<B>; }
22
23export type Subscription = [() => void];
24
25export type Observer<A> = [(value: A) => void, () => void];
26
27export type Subject<A> = [Source<A>, (value: A) => void, () => void];