import type { SyncIter } from '../containers'; export interface Matchable { match(obj: Record): R; } export interface IntoIter { iter(): SyncIter; } export interface Unwrapable { unwrap(msg?: string): T | never; } export interface PartialUnwrappable { unwrapOr(val: (() => T) | T): T; } export interface Monad { map(cb: (value: T) => R): C; } export interface PartialMonad { mapOr(init: R | (() => R), cb: (val: T) => R): R; } export interface Filterable { filter(predicate: (value: T) => boolean): C; } export interface Into { ok(): R; } export interface PartialInto { okOr(val: any): R; } export interface Xorable { xor(val: C | ((val?: any) => C)): C; } export interface Andable { and(val: C | ((val?: any) => C)): C; } export interface Orable { or(val: C | ((val?: any) => C)): C; }