We need to be able to hash and compare keys, and values need to form a monoid
type keytype value
val hash : key -> intval equal : key -> key -> boolval merge : value -> value -> valueShould be associative commutative
val zero : valueShould be associative commutative
Neutral element of merge