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 program() begin upcast := @store; put(@store, byte_key) return 0u8 end.