export type DefaultOrFunc = T | (() => T) /** Get `T` in `DefaultOrFunc` */ export function getDefault(defv: DefaultOrFunc): T { if (typeof defv === 'function') return (defv as any)() return defv } /** Identity function */ export function identity(val: T): T { return val } /** Guard value type */ export function guard(val: T): T { return val } /** Do nothing */ export function empty(): void { } /** `throw 'todo'` */ export function TODO(reason: any = 'todo'): never { throw reason ?? 'todo' } /** throw but expression */ export function raise(err: any): never { throw err } /** Promise that will never continue */ export function abort(): Promise { return new Promise(empty) } /** Yield time slice */ export function Yield(): Promise { return Promise.resolve() } /** build tuple */ export function tuple(...vals: T): T { return vals }