let compare v1 v2 = match v1, v2 with
   | (v1, id1, _,_), (v2, id2, _,_) ->
      let cmp = String.compare v1 v2 in
      if cmp <> 0 then cmp
      else
        begin
          match id1 , id2 with
            | None , None -> 0
            | Some _ , None -> 1
            | None , Some _ -> (-1)
            | Some id1 , Some id2 -> Pervasives.compare id1 id2
        end