Skip to content

hashing library that is generic on the hashing function, and a ppx deriving plugin for type-directer hashers

Notifications You must be signed in to change notification settings

imandra-ai/mhash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

dcaf6fa · Aug 19, 2021

History

23 Commits
Aug 17, 2021
Aug 19, 2021
Aug 17, 2021
Aug 11, 2021
Aug 17, 2021
Aug 17, 2021
Aug 17, 2021
Aug 17, 2021
Aug 17, 2021
Aug 17, 2021

Repository files navigation

Mhash + ppx_deriving_mhash build

This project contains:

  • mhash, to implement hashing for types in a way that is compatible with many concrete hashing functions
  • ppx_deriving_mhash to automatically derive such hashers

The mhash library comes with an implementation of the FNV algorithm.

Using the ppx

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

Attributes

  • [@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 type ty must be an expression of type ty Mhash.hasher

About

hashing library that is generic on the hashing function, and a ppx deriving plugin for type-directer hashers

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published