use crate::prelude::*;
#[inline]
#[must_use]
pub fn hash<H: core::hash::Hash>(h: H) -> u64 {
use core::hash::Hasher;
let mut hasher = ahash::AHasher::default();
h.hash(&mut hasher);
hasher.finish()
}
#[inline]
#[must_use]
pub fn hash_consume<A: Applicative<u64, Applicative<u64> = A>, H: core::hash::Hash>(h: H) -> A {
consume(hash(h))
}
#[inline]
#[must_use]
pub const fn reverse(a: u64) -> u64 {
a.reverse_bits()
}
#[inline]
#[must_use]
pub fn reverse_consume<A: Applicative<u64, Applicative<u64> = A>>(a: u64) -> A {
consume(reverse(a))
}