Allow recursive types in type annotations for `list'.
Closes PR 10562. Tests for fixed bugs. original commit: 7e9313bad3c8f8b7d6e0241f6904dce45ac77786
This commit is contained in:
parent
d27153b74c
commit
1e25674287
12
collects/tests/typed-scheme/fail/pr10350.rkt
Normal file
12
collects/tests/typed-scheme/fail/pr10350.rkt
Normal file
|
@ -0,0 +1,12 @@
|
|||
#lang typed-scheme
|
||||
(require/typed
|
||||
scheme/base
|
||||
[values (All (T) ((Any -> Boolean) -> (Any -> Boolean : T)))])
|
||||
|
||||
(: number->string? (Any -> Boolean : (Number -> String)))
|
||||
(define (number->string? x)
|
||||
(((inst values (Number -> String)) procedure?) x))
|
||||
|
||||
(: f (Number -> String))
|
||||
(define f
|
||||
(if (number->string? +) + number->string))
|
14
collects/tests/typed-scheme/succeed/pr10319.rkt
Normal file
14
collects/tests/typed-scheme/succeed/pr10319.rkt
Normal file
|
@ -0,0 +1,14 @@
|
|||
|
||||
#lang typed-scheme
|
||||
|
||||
(define-type-alias LSN (Rec LSN (U '() (cons Number LSN) (cons Symbol LSN))))
|
||||
|
||||
(: sum (LSN -> Number))
|
||||
;; add all numbers in this lsn
|
||||
(define (sum lsn)
|
||||
(cond
|
||||
[(null? lsn) 0]
|
||||
[(number? (car lsn)) (+ (car lsn) (sum (cdr lsn)))]
|
||||
[else (sum (cdr lsn))]))
|
||||
|
||||
(sum '(a b 2 3))
|
5
collects/tests/typed-scheme/succeed/pr10342.rkt
Normal file
5
collects/tests/typed-scheme/succeed/pr10342.rkt
Normal file
|
@ -0,0 +1,5 @@
|
|||
#lang typed-scheme
|
||||
(require/typed
|
||||
scheme/base
|
||||
[opaque WeakBox weak-box?]
|
||||
[make-weak-box (Any -> WeakBox)])
|
4
collects/tests/typed-scheme/succeed/pr10562.rkt
Normal file
4
collects/tests/typed-scheme/succeed/pr10562.rkt
Normal file
|
@ -0,0 +1,4 @@
|
|||
#lang typed/racket
|
||||
(: foo : (Rec this (List Number (Boxof (U #f this)))))
|
||||
(define foo (list 1 (box #f)))
|
||||
(set-box! (second foo) foo)
|
|
@ -3,7 +3,7 @@
|
|||
(require "../utils/utils.rkt")
|
||||
|
||||
(require (rep type-rep object-rep filter-rep rep-utils)
|
||||
"printer.rkt" "utils.rkt"
|
||||
"printer.rkt" "utils.rkt" "resolve.rkt"
|
||||
(utils tc-utils)
|
||||
scheme/list
|
||||
scheme/match
|
||||
|
@ -42,7 +42,7 @@
|
|||
(foldr -pair (-val '()) l))
|
||||
|
||||
(define (untuple t)
|
||||
(match t
|
||||
(match (resolve t)
|
||||
[(Value: '()) null]
|
||||
[(Pair: a b) (cond [(untuple b) => (lambda (l) (cons a l))]
|
||||
[else #f])]
|
||||
|
|
Loading…
Reference in New Issue
Block a user