let rec key_of_value value =
  function
      [] ->
        raise InternalError
    | (k, v) :: l ->
        if compare v value = 0 then k else key_of_value value l