diff --git a/Assignments/03.rkt b/Assignments/03.rkt index 389e18c..2d45e89 100644 --- a/Assignments/03.rkt +++ b/Assignments/03.rkt @@ -390,10 +390,15 @@ (let* ([arg-type (parse-type te)] [res-type (typecheck body (BindType name arg-type env))]) (arrowT arg-type res-type))] - [(listE elements) (begin - (define type-list (map (lambda (x) (typecheck x env)) elements)) - - (listT )] + [(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))] + (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")])))] )) ;; ----------------------------------------