From 632c153b974ee9c553d08beb27d5e4d60396a2ac Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Sun, 2 Nov 2025 20:24:33 -0800 Subject: map index --- src/lang/core/eval.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/lang/core') diff --git a/src/lang/core/eval.ts b/src/lang/core/eval.ts index 3dcf9b0..981aef8 100644 --- a/src/lang/core/eval.ts +++ b/src/lang/core/eval.ts @@ -52,15 +52,17 @@ export type FnPrim< Fn extends ASTNode = ASTNode > = { args: Args; fn: Fn }; -// Can support multiple args, just need to make the last arg be the fn export type HandleFn = Node["children"] extends [ - infer Arg extends ASTNode, + ...infer Args extends ASTNode[], infer Fn extends ASTNode ] - ? FnPrim<[Arg], Fn> + ? FnPrim : never; -type MapZip = { +export type MapZip< + T extends readonly ASTNode[], + U extends readonly PropertyKey[] +> = { [Idx in Exclude< keyof T, keyof any[] @@ -102,7 +104,8 @@ export type GetEvaluatedChildren< } : never; -const input = `map(arr(5,5,5), fn(n, add(n, 1)))` as const; +const input = + `map(arr("hello","world"),fn(s,i,add(tostring(i),":",s)))` as const; const lex_result = null as unknown as Lex; const parse_result = null as unknown as Parse; const eval_result = null as unknown as Evaluate; -- cgit v1.2.3-70-g09d2