File tree Expand file tree Collapse file tree 4 files changed +29
-24
lines changed
typed-racket-lib/typed-racket/types
typed-racket-test/tests/typed-racket/unit-tests Expand file tree Collapse file tree 4 files changed +29
-24
lines changed Original file line number Diff line number Diff line change 68
68
69
69
(define (-opt t) (Un (-val #f ) t))
70
70
71
- (define (-Tuple l)
72
- (-Tuple* l -Null))
73
-
74
- (define (-Tuple* l b)
75
- (foldr -pair b l))
76
-
77
71
;; Convenient constructor for Values
78
72
;; (wraps arg types with Result)
79
73
(define/cond-contract (-values args)
Original file line number Diff line number Diff line change 59
59
;; Void is needed for Params
60
60
(define/decl -Void (make-Base 'Void #'void? void? #f ))
61
61
62
- ;; -lst* Type is needed by substitute for ListDots
62
+ ;; -Tuple Type is needed by substitute for ListDots
63
63
(define -pair make-Pair)
64
64
(define (-lst* #:tail [tail -Null] . args)
65
65
(for/fold ([tl tail]) ([a (in-list (reverse args))]) (-pair a tl)))
66
+ (define (-Tuple l)
67
+ (-Tuple* l -Null))
68
+ (define (-Tuple* l b)
69
+ (foldr -pair b l))
66
70
67
71
;; Simple union type constructor, does not check for overlaps
68
72
;; Normalizes representation by sorting types.
Original file line number Diff line number Diff line change 4
4
racket/match racket/set
5
5
racket/lazy-require
6
6
(contract-req)
7
- (only-in (types base-abbrev) -lst * -result)
7
+ (only-in (types base-abbrev) -Tuple * -lst -Null - result ManyUniv )
8
8
(rep type-rep rep-utils)
9
9
(utils tc-utils)
10
10
(rep free-variance)
99
99
(if (eq? name dbound)
100
100
;; We need to recur first, just to expand out any dotted usages of this.
101
101
(let ([expanded (sb dty)])
102
- (for/fold ([t (make-Value null )])
102
+ (for/fold ([t (if rimage (-lst rimage) -Null )])
103
103
([img (in-list (reverse images))])
104
104
(make-Pair (substitute img name expanded) t)))
105
105
(make-ListDots (sb dty) dbound))]
106
106
[#:ValuesDots types dty dbound
107
107
(if (eq? name dbound)
108
- (make-Values
109
- (append
110
- (map sb types)
111
- ;; We need to recur first, just to expand out any dotted usages of this.
112
- (let ([expanded (sb dty)])
113
- (for/list ([img (in-list images)])
114
- (-result (substitute img name expanded))))))
108
+ (if rimage
109
+ ManyUniv
110
+ (make-Values
111
+ (append
112
+ (map sb types)
113
+ ;; We need to recur first, just to expand out any dotted usages of this.
114
+ (let ([expanded (sb dty)])
115
+ (for/list ([img (in-list images)])
116
+ (-result (substitute img name expanded)))))))
115
117
(make-ValuesDots (map sb types) (sb dty) dbound))]
116
118
[#:arr dom rng rest drest kws
117
119
(if (and (pair? drest)
148
150
(sb dty)
149
151
(if (eq? name dbound) image-bound dbound)))]
150
152
[#:ListDots dty dbound
151
- (apply -lst *
153
+ (-Tuple *
152
154
(if (eq? name dbound) pre-image null)
153
- #:tail
154
155
(make-ListDots (sb dty)
155
156
(if (eq? name dbound) image-bound dbound)))]
156
157
[#:F name*
Original file line number Diff line number Diff line change 10
10
(define-syntax-rule (s img var tgt result)
11
11
(test-eq? (format "~a " '(img tgt)) (substitute img 'var tgt) result))
12
12
13
+
14
+ (define-syntax-rule (s* imgs rest var tgt result)
15
+ (test-eq? (format "~a " '(img tgt)) (substitute-dots (list . imgs) rest 'var tgt) result))
16
+
13
17
(define-syntax-rule (s... imgs var tgt result)
14
18
(test-eq? (format "~a " '(img tgt)) (substitute-dots (list . imgs) #f 'var tgt) result))
15
19
16
20
(define tests
17
21
(test-suite "Tests for substitution "
18
- (s -Number a (-v a) -Number)
19
- (s... (-Number -Boolean) a (make-Function (list (make-arr-dots null -Number (-v a) 'a ))) (-Number -Boolean . -> . -Number))
20
- (s... (-Number -Boolean) a (make-Function (list (make-arr-dots (list -String) -Number (-v a) 'a ))) (-String -Number -Boolean . -> . -Number))
21
- (s... (-Number -Boolean) a (make-Function (list (make-arr-dots (list -String) -Number (-v b) 'a ))) (-String (-v b) (-v b) . -> . -Number))
22
- (s... (-Number -Boolean) a (make-Function (list (make-arr-dots (list -String) -Number (-v b) 'b )))
23
- (make-Function (list (make-arr-dots (list -String) -Number (-v b) 'b ))))))
22
+ (s -Number a (-v a) -Number)
23
+ (s* (-Symbol -String) #f a (make-ListDots (-v a) 'a ) (-lst* -Symbol -String))
24
+ (s* (-Symbol -String) Univ a (make-ListDots (-v a) 'a ) (-lst* -Symbol -String #:tail (-lst Univ)))
25
+ (s... (-Number -Boolean) a (make-Function (list (make-arr-dots null -Number (-v a) 'a ))) (-Number -Boolean . -> . -Number))
26
+ (s... (-Number -Boolean) a (make-Function (list (make-arr-dots (list -String) -Number (-v a) 'a ))) (-String -Number -Boolean . -> . -Number))
27
+ (s... (-Number -Boolean) a (make-Function (list (make-arr-dots (list -String) -Number (-v b) 'a ))) (-String (-v b) (-v b) . -> . -Number))
28
+ (s... (-Number -Boolean) a (make-Function (list (make-arr-dots (list -String) -Number (-v b) 'b )))
29
+ (make-Function (list (make-arr-dots (list -String) -Number (-v b) 'b ))))))
You can’t perform that action at this time.
0 commit comments