1    type Multimap<K, V>
2        def join<W> (other : Map<K, W>) : Map<V, W> =
3            let map = Map<V, W>.new
4    
5            let multimap_token = bind
6                { k v -> if other.contains k then
7                             let w = other[k]
8                             map.add v w
9    
10                        @[weak map] }
11   
12               { _ v -> if map.contains v then
13                            map.remove v
14   
15                        @[weak map] }
16   
17           let map_token = other.subscribe
18               { k w -> if contains k then
19                            for v in self[k] do
20                                map.add v w
21   
22                        @[weak map] }
23   
24               { k _ w -> if contains k then
25                              for v in self[k] do
26                                  map[v] = w
27   
28                          @[weak map] }
29   
30               { k _ -> if contains k then
31                            for v in self[k] do
32                                map.remove v
33   
34                        @[weak map] }
35   
36           map.push_token map_token
37               push_token multimap_token
38   
39           map.as_readonly
40