program() type File = record fd: Int end Map#[K, V] = record key: ^K; value: ^V end Cache#[K, V] = record(Map#[Word8, V]) newest: ^K end var store: Cache#[Int, File] byte_key: ^Word8 upcast: ^Map#[Word8, File] proc put#[K2, V2](target: ^Map#[K2, V2]; key: ^K2) begin target^.key := key return begin upcast := @store; put(@store, byte_key) end.