Skip to content

Commit 5b502e7

Browse files
authored
fix a bug in typechecking partially type-annotated lambdas (#1016)
When using an expected arrow type to check a lambda with not every parameter annotated, the existing annotation was thrown away, and the lambda was treated as non-annotated one. closes #1011
1 parent 921d891 commit 5b502e7

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

typed-racket-lib/typed-racket/typecheck/tc-lambda-unit.rkt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@
137137
(cond
138138
[(andmap type-annotation arg-list)
139139
(get-types arg-list #:default Univ)]
140-
[(zero? extra-arg-count) arg-tys]
140+
[(zero? extra-arg-count)
141+
(map (lambda (a t) (get-type a #:default t)) arg-list arg-tys)]
141142
[(negative? extra-arg-count) (take arg-tys arg-len)]
142143
[else
143144
(define tail-tys (match rst
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#;
2+
(exn-pred 1)
3+
#lang typed/racket
4+
5+
(struct root ([p : Integer] [q : Integer])
6+
#:property prop:custom-write
7+
(λ ([me : Integer] [port : Output-Port] mode) : Void
8+
(void)))

typed-racket-test/unit-tests/typecheck-tests.rkt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,12 @@
840840
[tc-e/t (let: ([x : (Un 'foo Number) 'foo])
841841
(if (eq? 'foo x) 3 x))
842842
-Number]
843+
[tc-err (let ()
844+
(: f (-> String Integer Number))
845+
(tr:define (f [a : Number] b)
846+
(string-length a))
847+
f)
848+
#:ret (tc-ret (t:-> -String -Integer -Number))]
843849

844850
[tc-err (let: ([x : (U String 'foo) 'foo])
845851
(if (string=? x 'foo)

0 commit comments

Comments
 (0)