(* id is a structure to permit garbage collection *) type id = { id: int } type context = int ref let create () = ref 0 let gen context = let id = { id = !context } in incr context; id