sig type 'a key val new_key : unit -> 'a key val get : 'a key -> 'a option val with_value : 'a key -> 'a option -> (unit -> 'b result) -> 'b result end