make a distinction between Hash.state and Hash.t (and private type is bad here)