|
21 | 21 | (define-type Env env) |
22 | 22 | (define-type TEnv t-env) |
23 | 23 | (define-type Tag Integer) |
24 | | -(define-type (Tagged a) (HashTable Tag a)) |
| 24 | +(define-type (Tagged a) (Immutable-HashTable Tag a)) |
25 | 25 |
|
26 | | -(struct: env ([names : (HashTable Symbol Pattern)] |
27 | | - [misnames : (HashTable Symbol (Pairof Pattern (Setof Tag)))] |
28 | | - [nreps : (HashTable Symbol (Pairof Env (Tagged Pattern)))]) |
| 26 | +(struct: env ([names : (Immutable-HashTable Symbol Pattern)] |
| 27 | + [misnames : (Immutable-HashTable Symbol (Pairof Pattern (Setof Tag)))] |
| 28 | + [nreps : (Immutable-HashTable Symbol (Pairof Env (Tagged Pattern)))]) |
29 | 29 | #:transparent) |
30 | 30 |
|
31 | | -(struct: t-env ([names : (HashTable Symbol Term)] |
32 | | - [misnames : (HashTable Symbol (Listof (Pairof Tag Term)))] |
33 | | - [nreps : (HashTable Symbol (Listof (Pairof TEnv (Tagged Term))))]) |
| 31 | +(struct: t-env ([names : (Immutable-HashTable Symbol Term)] |
| 32 | + [misnames : (Immutable-HashTable Symbol (Listof (Pairof Tag Term)))] |
| 33 | + [nreps : (Immutable-HashTable Symbol (Listof (Pairof TEnv (Tagged Term))))]) |
34 | 34 | #:transparent) |
35 | 35 |
|
36 | 36 | (: empty-env : Env) |
|
63 | 63 |
|
64 | 64 | (: pure-nrep : Symbol Env Tag Pattern -> Env) |
65 | 65 | (define (pure-nrep n repnv tag pat) |
66 | | - (: nreps : (HashTable Symbol (Pairof Env (Tagged Pattern)))) |
| 66 | + (: nreps : (Immutable-HashTable Symbol (Pairof Env (Tagged Pattern)))) |
67 | 67 | (define nreps |
68 | | - (hash-set (ann (hash) (HashTable Symbol (Pairof Env (Tagged Pattern)))) |
| 68 | + (hash-set (ann (hash) (Immutable-HashTable Symbol (Pairof Env (Tagged Pattern)))) |
69 | 69 | n |
70 | 70 | (cons repnv |
71 | 71 | (hash-set (ann (hash) (Tagged Pattern)) |
|
113 | 113 | (redex-error 'generate-term-#:ith "mismatch named patterns must be the same pattern, saw ~s and ~s" p1 p2)) |
114 | 114 | (cons p1 (set-union ts1 ts2))]) |
115 | 115 |
|
116 | | - (: misnames-union : (HashTable Symbol (Pairof Pattern (Setof Tag)))) |
| 116 | + (: misnames-union : (Immutable-HashTable Symbol (Pairof Pattern (Setof Tag)))) |
117 | 117 | (define misnames-union |
118 | 118 | (hash-union ms1 ms2 mis-combo)) |
119 | 119 |
|
|
130 | 130 | (hash-union rs1 rs2 nrep-combo)) |
131 | 131 | (env names-union misnames-union nreps-union)]) |
132 | 132 |
|
133 | | -(: key-set : (All (k v) (HashTable k v) -> (Setof k))) |
| 133 | +(: key-set : (All (k v) (Immutable-HashTable k v) -> (Setof k))) |
134 | 134 | (define (key-set m) |
135 | 135 | (list->set (hash-keys m))) |
136 | 136 |
|
137 | | -(: hash-union : (All (k v) (HashTable k v) (HashTable k v) (k v v -> v) -> (HashTable k v))) |
| 137 | +(: hash-union : (All (k v) (Immutable-HashTable k v) (Immutable-HashTable k v) (k v v -> v) -> (Immutable-HashTable k v))) |
138 | 138 | (define (hash-union m1 m2 combo) |
139 | 139 | (: ks1 : (Setof k)) |
140 | 140 | (: ks2 : (Setof k)) |
141 | 141 | (define ks1 (key-set m1)) |
142 | 142 | (define ks2 (key-set m2)) |
143 | | - (for/hash: : (HashTable k v) |
| 143 | + (for/hash: : (Immutable-HashTable k v) |
144 | 144 | ([k : k (in-set (set-union ks1 ks2))]) |
145 | 145 | (define v1 (hash-ref m1 k (thunk #f))) |
146 | 146 | (define v2 (hash-ref m2 k (thunk #f))) |
|
0 commit comments