Fix parsing of dotted rest when there is an expected type.
Closes PR 13646.
This commit is contained in:
parent
5669c372b2
commit
3d49087ea3
17
collects/tests/typed-racket/succeed/pr13646.rkt
Normal file
17
collects/tests/typed-racket/succeed/pr13646.rkt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#lang typed/racket
|
||||||
|
|
||||||
|
(struct: (A) Queue ([elem : A]))
|
||||||
|
|
||||||
|
(: qmap :
|
||||||
|
(All (A B ...)
|
||||||
|
(case->
|
||||||
|
((A -> A) (Queue A) -> (Queue A))
|
||||||
|
((A B ... B -> A) (Queue A) (Queue B) ... B -> (Queue A)))))
|
||||||
|
(define qmap
|
||||||
|
(pcase-lambda:
|
||||||
|
(A B ...)
|
||||||
|
[([func : (A -> A)] [deq : (Queue A)])
|
||||||
|
deq]
|
||||||
|
[([func : (A B ... B -> A)]
|
||||||
|
[deq : (Queue A)] . [deqs : (Queue B) ... B])
|
||||||
|
deq]))
|
|
@ -101,7 +101,7 @@
|
||||||
[(dotted? rest)
|
[(dotted? rest)
|
||||||
=>
|
=>
|
||||||
(lambda (b)
|
(lambda (b)
|
||||||
(let ([dty (get-type rest #:default Univ)])
|
(let ([dty (extend-tvars (list b) (get-type rest #:default Univ))])
|
||||||
(with-lexical-env/extend
|
(with-lexical-env/extend
|
||||||
(list rest) (list (make-ListDots dty b))
|
(list rest) (list (make-ListDots dty b))
|
||||||
(check-body))))]
|
(check-body))))]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user