UNPKG

inquiry-monad

Version:

Inquiry is an expressive API that allows one ask multiple questions about a subject value, and observe all results. This process returns a collection of all passes, fails, and the original subject value.

114 lines (113 loc) 3 kB
import { $$inquirySymbol, $$questionsetSymbol, $$questionSymbol, $$passSymbol, $$failSymbol, $$iouSymbol, $$receiptSymbol } from './symbols'; export interface Monad { map: Function; chain: Function; join: Function; emit: Function; inspect(): string; ap: Function; } export interface PassFailMonad extends Monad { fold: Function; fork: Function; concat: Function; answer: Function; head: Function; tail: Function; isEmpty: Function; [$$passSymbol]: boolean; [$$failSymbol]: boolean; [$$iouSymbol]: false; [$$inquirySymbol]: false; } export interface IOUMonad extends Monad { concat: Function; head: Function; tail: Function; isEmpty: Function; [$$iouSymbol]: true; [$$failSymbol]: false; [$$inquirySymbol]: false; [$$passSymbol]: false; } export interface PassMonad extends PassFailMonad { [$$failSymbol]: false; [$$passSymbol]: true; } export interface FailMonad extends PassFailMonad { [$$passSymbol]: false; [$$failSymbol]: true; } export interface QuestionsetMonad extends Monad { find: Function; concat: Function; [$$questionsetSymbol]: true; } export interface QuestionMonad extends Monad { call: (i: InquiryMonad) => PassFailMonad; extract: () => QuestionValue[1]; name: () => QuestionValue[0]; [$$questionSymbol]: true; } export interface ReceiptValue extends Array<string | RegExp | PassFailMonad> { 0: string | RegExp; 1: PassFailMonad; } export interface ReceiptMonad extends Monad { [$$receiptSymbol]: true; [$$inquirySymbol]: false; concat: Function; head: Function; tail: Function; isEmpty: Function; fold: Function; fork: Function; } export interface InquiryValue { subject: any; fail: FailMonad; pass: PassMonad; informant: Function; iou: IOUMonad; questionset: QuestionsetMonad | void; receipt: ReceiptMonad; } export interface InquiryMonad extends Monad { inquire: Function; inquireMap: Function; inquireAll: Function; zip: Function; swap: Function; fork: Function; fold: Function; faulted: Function; cleared: Function; suffice: Function; scratch: Function; informant: Function; unison: Function; breakpoint: Function; milestone: Function; answer: Function; conclude: Function; using: Function; await?: Function; [$$inquirySymbol]: true; } export interface QuestionValue extends Array<string | RegExp | Function> { 0: string | RegExp; 1: Function; } export interface MonadConstructor { of: Function; } export interface QuestionsetMonadConstructor extends MonadConstructor { of: (x: any) => QuestionsetMonad | void; } export interface QuestionMonadConstructor extends MonadConstructor { of: (x: any) => QuestionMonad | void; } export interface InquiryConstructor extends MonadConstructor { subject: (x: any) => InquiryMonad; of: (a: InquiryValue) => InquiryMonad; }