let make_counter () =
  let data = Hashtbl.create 13 in
  let all () =
    Hashtbl.fold
      (fun k v lst -> (k, v) :: lst)
      data []
  in
  let incr k =
    let v =
      try
        Hashtbl.find data k
      with Not_found ->
        0
    in
      Hashtbl.replace data k (v + 1)
  in
    all, incr