let of_string s =
    match String_table.find all s with
    | None ->
        let t = {
          string = s;
          (* CRv2 | OG: shouldn't we just use String.hash here?  It's equivalent, but
             clearer and makes it easier to modify our string-hashing algorithm later *)

          hash = Hashtbl.hash_param 1 1 s;
        } in
        String_table.add all ~key:s ~data:t;
        t
    | Some t -> t