type File = record fd: Int end Pair#[K, V] = record key: K; value: V end var entry: Pair#[^File, ^Word8] proc allocate#[T](size: Word) -> T extern proc first#[K, V](entry_ptr: ^Pair#[K, V]) -> K begin return entry_ptr^.key program() begin entry.key := allocate#[^File](#size(File)); assert(#size(Pair#[^File, ^Word8]) = #size(Pointer) * 2u); assert(#offset(Pair#[^File, ^Word8], value) = #size(Pointer)); assert(first#[^File, ^Word8](@entry) = entry.key) return 0u8 end.