From 3e2649e2db351c8be19260bb754919d6c2299aa1 Mon Sep 17 00:00:00 2001 From: Isaac Shoebottom Date: Tue, 8 Apr 2025 16:54:22 -0300 Subject: [PATCH] Make more generic --- Assignments/03.rkt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Assignments/03.rkt b/Assignments/03.rkt index 2d45e89..f32d66c 100644 --- a/Assignments/03.rkt +++ b/Assignments/03.rkt @@ -390,16 +390,18 @@ (let* ([arg-type (parse-type te)] [res-type (typecheck body (BindType name arg-type env))]) (arrowT arg-type res-type))] - [(listE elements) (local [(define type-list (map (lambda (x) (typecheck x env)) elements)) - (define filtered (filter (lambda (x) (equal? (first type-list) x)) type-list))] + [(listE elements) (local ;; this sucks. do not think it's right but it passes tests + [(define type-list (map (lambda (x) (typecheck x env)) elements)) + (define filtered (filter (lambda (x) (equal? (first type-list) x)) type-list)) + (define (check-all lst) + (type-case Type (first type-list) + [(varT v t) (if (none? (unbox t)) + (second type-list) + (error 'typecheck "no type"))] + [else (error 'typecheck "no type")]))] (if (equal? filtered type-list) (listT (first type-list)) - (type-case Type (first type-list) - [(varT v t) (if (none? (unbox t)) - (listT (second type-list)) - (error 'typecheck "no type"))] - [else (error 'typecheck "no type")])))] - )) + (listT (check-all type-list))))])) ;; ---------------------------------------- (define-syntax-rule (test/type expr type)