This project contains:
mhash, to implement hashing for types in a way that is compatible with many concrete hashing functionsppx_deriving_mhashto automatically derive such hashers
The mhash library comes with an implementation of
the FNV
algorithm.
After adding (preprocess (pps ppx_deriving_hhash)) in dune, this should work:
# type foo = {
x : int;
y : string;
} [@@deriving mhash] ;;
type foo = { x : int; y : string; }
val hasher_foo : foo Mhash.hasher =
{Mhash.hash_into = <fun>}
val hash_foo : algo:('a, 'b) Mhash.hash_algo -> foo -> 'b =
<fun>
# #require "mhash.fnv";;
# hash_foo ~algo:Mhash_fnv.int {x=1; y="foo"};;
- : int = 3535931368763302282[@nohash]on a type will skip hashing for this type. Useful when a type declaration contains some function fields, or other fields that shouldn't affect the hash.[@hasher <expr>]forces the ppx to use<expr>as the hasher for the given type. The attribute for a typetymust be an expression of typety Mhash.hasher