export type Parser = ((context: Context) => Result) & { export?: () => Parser[]; }; export type Result = Success | Failure; export type Success = Readonly<{ success: true; value: T; context: Context; }>; export type Failure = Readonly<{ success: false; expected: string; context: Context; }>; export type Context = Readonly<{ text: string; index: number; }>;