import { FnPrim } from "../core/eval"; import { AddNumbers, AddStrings, Multiply, ToString, UnarrayIfOnlyHead, } from "../util"; export type FnError = `Function execution error: ${T}`; export type BUILTIN_Arr = Args; export type BUILTIN_ToString = ToString< UnarrayIfOnlyHead<{ [Idx in keyof Args]: ToString; }> >; export type BUILTIN_Add = Args extends readonly string[] ? AddStrings : Args extends readonly number[] ? AddNumbers : FnError<`Cannot add operands ${ToString}`>; export type BUILTIN_Mul = Args extends [ infer A, infer B, infer C ] ? FnError<`Can only multiply [number, number], but got ${ToString}`> : Args extends [infer M extends number, infer N extends number] ? Multiply : FnError<`Can only multiply [number, number], but got ${ToString}`>; export type BUILTIN_Call = Args extends [infer Fn extends FnPrim, ...infer Valuex extends readonly any[]] = export type BUILTIN_Map