pub type Ctx(data) = #(data, Dict(Dynamic, Dynamic))
pub fn call( ctx: #(a, Dict(Dynamic, Dynamic)), fun: fn(#(a, Dict(Dynamic, Dynamic))) -> #(b, #(a, Dict(Dynamic, Dynamic))), cb: fn(b, #(a, Dict(Dynamic, Dynamic))) -> c, ) -> c
pub fn make_ctx(data: a) -> #(a, Dict(b, c))