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