1 type Map<K, V> 2 def to_stream = 3 let stream = Stream<K>.new 4 5 bind { k _ -> stream.push k @[weak stream] } 6 { k _ _ -> stream.push k @[weak stream] } 7 { k _ -> stream.push k @[weak stream] } 8 |> stream.push_token 9 10 stream.as_readonly 11 12 object Obs 13 def map<K, V, U> (map : Map<K, V>) (f : K * V -> U) = 14 let to = Map<K, U>.new 15 16 map.bind { k v -> to.add k (f k v) @[weak to] } 17 { k _ v -> to[k] = f k v @[weak to] } 18 { k _ -> to.remove k @[weak to] } 19 |> to.push_token 20 21 to.as_readonly 22