declare type Head = StrT extends `${infer HeadT}${string}` ? HeadT : never; declare type Tail = StrT extends `${string}${infer TailT}` ? TailT : never; export interface DFA { startState: string; acceptStates: string; transitions: Record>; } declare type AcceptsImpl = InputT extends "" ? StateT extends DfaT["acceptStates"] ? true : false : AcceptsImpl], Tail>; /** * Does {@typeparam DfaT} accept {@typeparam InputT}? * * Type `true`, `false`, or `never`. * Will broaden to `boolean` if you pass a union type where at least one gives `true` and one gives `false`. */ export declare type DFAAccepts = AcceptsImpl; export {};