Skip to content

Commit aa2b508

Browse files
author
Ryan Ficklin
committed
Fixed treelist subtyping and added more treelist test
1 parent 9b1b8aa commit aa2b508

File tree

6 files changed

+92
-3
lines changed

6 files changed

+92
-3
lines changed

typed-racket-lib/typed-racket/base-env/base-env.rkt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,8 +1298,8 @@
12981298
;; Section 4.21 (TreeLists)
12991299

13001300
[treelist (-poly (a) (->* (list) a (-treelist a)))]
1301-
[treelist-empty? (-poly (a) (-> (-treelist a) B))]
1302-
[treelist-length (-poly (a) (-> (-treelist a) -Index))]
1301+
[treelist-empty? (-> (-treelist Univ) B)]
1302+
[treelist-length (-> (-treelist Univ) -Index)]
13031303
[treelist-member?
13041304
(-poly (a)
13051305
(cl->* ((-treelist a) a . -> . Univ)

typed-racket-lib/typed-racket/types/subtype.rkt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,6 +1278,12 @@
12781278
[(? ThreadCellTop?) A]
12791279
[(ThreadCell: elem2) (type≡? A elem1 elem2)]
12801280
[_ (continue<: A t1 t2 obj)])]
1281+
[(case: TreeList (TreeList: elem1))
1282+
(match t2
1283+
[(TreeList: elem2) (subtype* A elem1 elem2)]
1284+
[(SequenceTop:) A]
1285+
[(Sequence: (list seq-t)) (subtype* A elem1 seq-t)]
1286+
[_ (continue<: A t1 t2 obj)])]
12811287
[(case: Union (Union/set: base1 ts1 elems1))
12821288
(let ([A (subtype* A base1 t2 obj)])
12831289
(and A
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#lang typed/racket
2+
3+
(require racket/treelist)
4+
5+
(define-predicate string-treelist? (TreeListof String))
6+
7+
(string-treelist? (treelist 1 2 3))
8+
9+
(string-treelist? (treelist "1" "2" "3"))
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#lang typed/racket
2+
3+
(require racket/treelist)
4+
5+
(define tl (treelist 0 1 2 3))
6+
7+
(treelist-empty? tl)
8+
9+
(treelist-length tl)
10+
11+
(treelist-member? tl 1)
12+
13+
(treelist-first tl)
14+
15+
(treelist-rest tl)
16+
17+
(treelist-last tl)
18+
19+
(treelist-add tl 1)
20+
21+
(treelist-cons tl 1)
22+
23+
(treelist-delete tl 1)
24+
25+
(make-treelist 5 1)
26+
27+
(treelist-ref tl 1)
28+
29+
(treelist-insert tl 1 1)
30+
31+
(treelist-set tl 0 1)
32+
33+
(treelist-take tl 2)
34+
35+
(treelist-take tl 2)
36+
(treelist-drop tl 2)
37+
(treelist-take-right tl 2)
38+
(treelist-drop-right tl 2)
39+
40+
(treelist-sublist tl 1 3)
41+
42+
(treelist-reverse tl)
43+
44+
(treelist->list tl)
45+
(list->treelist (list 0 1 2 3))
46+
47+
(treelist->vector tl)
48+
(vector->treelist (vector 0 1 2 3))
49+
50+
(treelist? treelist)
51+
52+
(treelist-append tl tl tl)
53+
54+
(treelist-map tl (λ ([x : Byte]) (+ x 1)))
55+
56+
(treelist-for-each tl (λ ([x : Byte]) (+ x 1)))
57+
58+
(treelist-filter (λ ([x : Byte]) (equal? x 1)) tl)
59+
60+
(treelist-find tl (λ ([x : Byte]) (equal? x 1)))
61+
62+
(treelist-index-of tl 3)
63+
(treelist-index-of tl 3 equal?)
64+
65+
(treelist-flatten (treelist tl tl))
66+
67+
(treelist-append (treelist (treelist tl) tl))
68+
69+
(treelist-sort tl >)

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@
179179
[make-Immutable-Vector ()]
180180
[make-Immutable-HashTable () ()]
181181
[make-Set ()]
182+
[make-TreeList ()]
182183
[make-Evt ()]
183184
[make-Syntax ()]
184185
[make-Future ()])
@@ -298,6 +299,10 @@
298299
[(-mu x (make-Listof x)) (-mu x* (make-Listof x*))]
299300
[(-pair -Number -Number) (-pair Univ -Number)]
300301
[(-pair -Number -Number) (-pair -Number -Number)]
302+
;; simple treelist types
303+
[(-treelist -Number) (-treelist Univ)]
304+
[(-treelist -Number) (-treelist -Number)]
305+
[FAIL (-treelist -Number) (-treelist -Symbol)]
301306
;; from page 7 (my favorite page! But seriously, page 7 of... what???)
302307
[(-mu t (-> t t)) (-mu s (-> s s))]
303308
[(-mu s (-> -Number s)) (-mu t (-> -Number (-> -Number t)))]

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1941,7 +1941,7 @@
19411941
;;(tc-e (in-treelist (treelist "a")) (-seq -String)) FIXME: "missing type identifier"
19421942
(tc-e (list->treelist (list "a")) (-treelist -String))
19431943
(tc-e (vector->treelist (vector "a")) (-treelist -String))
1944-
(tc-e (treelist? (treelist "a")) -Boolean)
1944+
(tc-e (treelist? (treelist "a")) #:ret (tc-ret -Boolean -true-propset))
19451945
(tc-e (treelist? (list "a")) #:ret (tc-ret -Boolean -false-propset))
19461946
(tc-e (treelist-append (treelist "a") (treelist "b")) (-treelist -String))
19471947
(tc-e (treelist-append (treelist "a") (treelist "b") (treelist "c")) (-treelist -String))

0 commit comments

Comments
 (0)