OCaml-карта int keys:: where является "простым" модулем int для использования с функтором Map.Make?

Мне нужна карта OCaml с ключами типа int, поэтому я использую Map.Make для ее создания. Однако кажется, что только стандартные модули предоставляют только такие модули, как Big_int, Int32, Int64 и Nativeint, которые требуют конверсий. Поэтому я должен делать такие вещи, как:

module IntMap = Map.Make(Int32) 
let a_map = IntMap.add (Int32.of_int 0) "zero" IntMap.empty ;;

..., который я бы предпочел избежать или определить свой собственный глупый модуль Int, имеет дело с простыми буквами или значениями без использования функций преобразования:

module Int = struct                       
   type t = int                                              
   let compare x y = if x < y then -1 else if x > y then 1 else 0 end ;;  
module IntMap = Map.Make(Int) 
let a_map = IntMap.add 0 "zero" IntMap.empty ;;

Я пропустил что-то очевидное здесь?

Ответы

Ответ 1

Самый простой способ иметь внутреннюю карту - сделать следующее:

module IntMap = Map.Make(struct type t = int let compare = compare end)

Ответ 2

Я не думаю, что вам что-то не хватает, нет стандартного модуля для этого. Я считаю, что BatInt модуль Аккумуляторы OCaml включены делает то, что вы хотите.

(Отредактировано для добавления: это правда, я сам использую метод, предложенный Томасом!)