Вы можете использовать ключевое слово include
внутри нового модуля, чтобы добавить все те же функции.Это также было расширено до подписи в OCaml 3.12 .
module StringMap =
struct
include Map.Make(String)
end
Если вы хотите получить доступ к структуре карты, вам нужно будет добавить Obj.magic
или %identity
специальная внешняя функция.Переопределение типа должно быть точным, поскольку проверка типов не выполняется,
module Make (Ord : Map.OrderedType) =
struct
include Map.Make(Ord)
type 'a impl = Empty
| Node of 'a impl * key * 'a * 'a impl * int
external impl_of_t : 'a t -> 'a impl = "%identity"
external t_of_impl : 'a impl -> 'a t = "%identity"
let cardinal map =
let rec cardinal = function
| Empty -> 0
| Node(l,_,_,r,_) -> cardinal l + 1 + cardinal r
in
cardinal (impl_of_t map)
end