From 4043a99e0df9fab6791c485721c0046971754175 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sun, 6 Apr 2025 14:52:59 -0400 Subject: Expand reducers so they support stuff like `(+.abs(): nums)` and `(==.length: texts)` --- src/typecheck.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/typecheck.c') diff --git a/src/typecheck.c b/src/typecheck.c index 21e02460..1aec4f3b 100644 --- a/src/typecheck.c +++ b/src/typecheck.c @@ -1295,6 +1295,11 @@ type_t *get_type(env_t *env, ast_t *ast) type_t *iterated = get_iterated_type(iter_t); if (!iterated) code_err(reduction->iter, "I don't know how to do a reduction over ", type_to_str(iter_t), " values"); + if (reduction->key && !(reduction->op == Min || reduction->op == Max)) { + env_t *item_scope = fresh_scope(env); + set_binding(item_scope, "$", iterated, CORD_EMPTY); + iterated = get_type(item_scope, reduction->key); + } return iterated->tag == OptionalType ? iterated : Type(OptionalType, .type=iterated); } -- cgit v1.2.3