This project contains:
mhash
, to implement hashing for types in a way that is compatible with many concrete hashing functionsppx_deriving_mhash
to 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 typety
must be an expression of typety Mhash.hasher