The class of types that can be converted to a hash value.
Minimal implementation: hashWithSalt.
Hashable is intended exclusively for use in in-memory data structures. . Hashable does not have a fixed standard. This allows it to improve over time. . Because it does not have a fixed standard, different computers or computers on different versions of the code will observe different hash values. As such, Hashable is not recommended for use other than in-memory datastructures. Specifically, Hashable is not intended for network use or in applications which persist hashed values. For stable hashing use named hashes: sha256, crc32, xxhash etc.
If you are looking for Hashable instance in time package,
check time-compat
Methods
hashWithSalt :: Int -> a -> Intinfixl 0Return a hash value for the argument, using the given salt.
The general contract of hashWithSalt is:
If two values are equal according to the == method, then applying the hashWithSalt method on each of the two values must produce the same integer result if the same salt is used in each case.
It is not required that if two values are unequal according to the == method, then applying the hashWithSalt method on each of the two values must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal values may improve the performance of hashing-based data structures.
This method can be used to compute different hash values for the same input by providing a different salt in each application of the method. This implies that any instance that defines hashWithSalt must make use of the salt in its implementation.
hashWithSalt may return negative Int values.
hash :: a -> IntLike hashWithSalt, but no salt is used. The default implementation uses hashWithSalt with some default salt. Instances might want to implement this method to provide a more efficient implementation than the default implementation.
Instances94Hashable, …
Hashable ByteArrayDefined in hashable-1.4.7.0 · Data.Hashable.ClassThis instance was available since 1.4.1.0 only for GHC-9.4+
Hashable ByteStringDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable ByteStringDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable ShortByteStringDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable IntSetDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable BigNatDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable IntegerDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable NaturalDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable VoidDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable ThreadIdDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable SomeTypeRepDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable UniqueDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable VersionDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable FingerprintDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable IntPtrDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable WordPtrDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable Int16Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable Int32Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable Int64Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable Int8Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable Word16Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable Word32Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable Word64Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable Word8Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable BoolDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable CharDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable DoubleDefined in hashable-1.4.7.0 · Data.Hashable.ClassNote: prior to
hashable-1.3.0.0,hash 0.0 /= hash (-0.0)The hash of NaN is not well defined.
Hashable FloatDefined in hashable-1.4.7.0 · Data.Hashable.ClassNote: prior to
hashable-1.3.0.0,hash 0.0 /= hash (-0.0)The hash of NaN is not well defined.
Hashable IntDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable OrderingDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable WordDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable OsStringDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable PosixStringDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable WindowsStringDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable ScientificDefined in scientific-0.3.8.0 · Data.ScientificA hash can be safely calculated from a
Scientific. No magnitude10^eis calculated so there's no risk of a blowup in space or time when hashing scientific numbers coming from untrusted sources.Example4 expressions import Data.Hashable (hash)let x = scientific 1 2let y = scientific 100 0(x == y, hash x == hash y)(True,True)
Hashable TextDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable TextDefined in hashable-1.4.7.0 · Data.Hashable.ClassHashable DayDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable MonthDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable QuarterDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable QuarterOfYearDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable DayOfWeekDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable DiffTimeDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable NominalDiffTimeDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable UTCTimeDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable UniversalTimeDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable TimeLocaleDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable LocalTimeDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable TimeOfDayDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable TimeZoneDefined in time-compat-1.9.8 · Data.Time.Orphans · orphanHashable UUIDDefined in uuid-types-1.0.6 · Data.UUID.Types.InternalHashable ()Defined in hashable-1.4.7.0 · Data.Hashable.ClassEq a => Hashable (Hashed a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable (FunPtr a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable (Ptr a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable (StableName a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (Complex a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (First a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (Last a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (Max a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (Min a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (WrappedMonoid a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (NonEmpty a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (Identity a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (Maybe a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (Ratio a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (HashSet a)Defined in unordered-containers-0.2.21 · Data.HashSet.InternalHashable a => Hashable (Vector a)Defined in vector-instances-3.4.2 · Data.Vector.Instances · orphanHashable a => Hashable (a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable [a]Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable v => Hashable (IntMap v)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable v => Hashable (Seq v)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable v => Hashable (Set v)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable v => Hashable (Tree v)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Storable a, Hashable a) => Hashable (Vector a)Defined in vector-instances-3.4.2 · Data.Vector.Instances · orphan(Prim a, Hashable a) => Hashable (Vector a)Defined in vector-instances-3.4.2 · Data.Vector.Instances · orphan(Unbox a, Hashable a) => Hashable (Vector a)Defined in vector-instances-3.4.2 · Data.Vector.Instances · orphanHashable (Fixed a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable (Proxy a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable (TypeRep a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassHashable a => Hashable (Arg a b)Defined in hashable-1.4.7.0 · Data.Hashable.ClassNote: Prior to
hashable-1.3.0.0the hash computation included the second argument ofArgwhich wasn't consistent with its Eq instance.(Hashable a, Hashable b) => Hashable (Either a b)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable a1, Hashable a2) => Hashable (a1, a2)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable k, Hashable v) => Hashable (Map k v)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable k, Hashable v) => Hashable (HashMap k v)Defined in unordered-containers-0.2.21 · Data.HashMap.InternalHashable a => Hashable (Const a b)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable a1, Hashable a2, Hashable a3) => Hashable (a1, a2, a3)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable a1, Hashable a2, Hashable a3, Hashable a4) => Hashable (a1, a2, a3, a4)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable1 f, Hashable1 g, Hashable a) => Hashable (Product f g a)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable1 f, Hashable1 g, Hashable a) => Hashable (Sum f g a)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable a1, Hashable a2, Hashable a3, Hashable a4, Hashable a5) => Hashable (a1, a2, a3, a4, a5)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable1 f, Hashable1 g, Hashable a) => Hashable (Compose f g a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassIn general,
hash (Compose x) ≠ hash x. However,hashWithSaltsatisfies its variant of this equivalence.(Hashable a1, Hashable a2, Hashable a3, Hashable a4, Hashable a5, Hashable a6) => Hashable (a1, a2, a3, a4, a5, a6)Defined in hashable-1.4.7.0 · Data.Hashable.Class(Hashable a1, Hashable a2, Hashable a3, Hashable a4, Hashable a5, Hashable a6, Hashable a7) => Hashable (a1, a2, a3, a4, a5, a6, a7)Defined in hashable-1.4.7.0 · Data.Hashable.Class