Да, записи хеш-таблиц ограничены одним типом для каждой таблицы.Это действительно вопрос о системе типа OCaml, а не о хеш-таблицах.Если вам кажется странным требовать, чтобы в хеш-таблице вещи были одного типа, как в списке?
Не зная проблемы, которую вы решаете, трудно понять, что предложить.Тем не менее, обычным делом является создание алгебраического типа, который имеет один вариант для каждого из типов, с которыми вы имеете дело:
type alg = A of int | B of float
Значение типа (string, alg) Hashtbl.tхранить целые и плавающие числа, используя строку в качестве ключа поиска.
# let ht = Hashtbl.create 44;;
val ht : ('_a, '_b) Hashtbl.t = <abstr>
# Hashtbl.add ht "yes" (A 3);;
- : unit = ()
# Hashtbl.add ht "no" (B 1.7);;
- : unit = ()
# ht;;
- : (string, alg) Hashtbl.t = <abstr>
# Hashtbl.find ht "yes";;
- : alg = A 3
После того, как вы привыкнете к гибкой и строгой типизации OCaml, трудно вернуться к системам без него.