Compare commits

..

3 Commits

Author SHA1 Message Date
89a081770e fix 2025-04-08 16:56:58 -03:00
36b11904da remove unneeded code path 2025-04-08 16:55:12 -03:00
3e2649e2db Make more generic 2025-04-08 16:54:22 -03:00

View File

@ -390,16 +390,16 @@
(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) (second type-list)]
[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)