32 lines
917 B
TypeScript
32 lines
917 B
TypeScript
export function todo<T>(msg?: string): T {
|
|
class NotImplemented extends Error {}
|
|
throw new NotImplemented(msg);
|
|
}
|
|
|
|
export function exhausted(_: never) {
|
|
class Unexhausted extends Error {}
|
|
throw new Unexhausted();
|
|
}
|
|
|
|
export type Res<V, E> = Ok<V> | Err<E>;
|
|
export type Ok<V> = { ok: true; val: V };
|
|
export type Err<E> = { ok: false; val: E };
|
|
|
|
export const Ok = <V>(val: V): Ok<V> => ({ ok: true, val });
|
|
export const Err = <E>(val: E): Err<E> => ({ ok: false, val });
|
|
|
|
export type ControlFlow<
|
|
R = undefined,
|
|
V = undefined,
|
|
> = Break<R> | Continue<V>;
|
|
|
|
export type Break<R> = { break: true; val: R };
|
|
export type Continue<V> = { break: false; val: V };
|
|
|
|
export const ControlFlow = {
|
|
Break: <R>(val: R): Break<R> => ({ break: true, val }),
|
|
Continue: <V>(val: V): Continue<V> => ({ break: false, val }),
|
|
} as const;
|
|
|
|
export const range = (length: number) => (new Array(length).fill(0));
|