úÎVĨNą     k(c) Milan Straka 2010 (c) Johan Tibell 2011 (c) Bryan O'Sullivan 2011, 2012 BSD-stylejohan.tibell@gmail.com provisionalportableNone %&06:<=BCT.A hashable value along with the result of the  function.<Lift a hashing function through the binary type constructor.5Lift a hashing function through the type constructor.2The class of types that can be generically hashed.9The class of types that can be converted to a hash value.Minimal implementation: .;Return a hash value for the argument, using the given salt.The general contract of  is:)If two values are equal according to the  method, then applying the & method on each of the two values mustK 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 ų 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  must0 make use of the salt in its implementation.Like 8, but no salt is used. The default implementation uses ” with some default salt. Instances might want to implement this method to provide a more efficient implementation than the default implementation.-A default salt used in the implementation of . Lift the ' function through the type constructor. -hashWithSalt1 = liftHashWithSalt hashWithSalt  Lift the ' function through the type constructor. ;hashWithSalt2 = liftHashWithSalt2 hashWithSalt hashWithSalt  Lift the j function halfway through the type constructor. This function makes a suitable default implementation of #, given that the type constructor t in question can unify with f a. Transform a value into a > value, then hash the transformed value using the given salt.vThis is a useful shorthand in cases where a type can easily be mapped to another type that is already an instance of  . Example: pdata Foo = Foo | Bar deriving (Enum) instance Hashable Foo where hashWithSalt = hashUsing fromEnumŸA value with bit pattern (01)* (or 5* in hexa), for any size of Int. It is used as data constructor distinguisher. GHC computes its value during compilation.Compute the hash of a ThreadId.NCompute the hash of a TypeRep, in various GHC versions we can do this quickly. 5Compute a hash value for the content of this pointer. MCompute a hash value for the content of this pointer, using an initial salt.ģThis function can for example be used to hash non-contiguous segments of memory as if they were one contiguous segment, by using the output of one hash as the salt for the next.-Compute a hash value for the content of this F, beginning at the specified offset, using specified number of bytes.-Compute a hash value for the content of this , using an initial salt.ģThis function can for example be used to hash non-contiguous segments of memory as if they were one contiguous segment, by using the output of one hash as the salt for the next. Combine two given hash values.  has zero as a left identity.#Wrap a hashable value, caching the  function result.Unwrap hashed value. cannot be  cannot be 1Uses precomputed hash to detect inequality faster In general, hash (Compose x) "` hash x . However,  hashWithSalt, satisfies its variant of this equivalence.„ !"#$%&'()*+ , Transformation function.Salt.Value to transform. pointer to the data to hashlength, in bytes hash value pointer to the data to hashlength, in bytessalt hash value data to hashoffset, in byteslength, in bytes hash value data to hashoffset, in byteslength, in bytessalt hash value-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡#$%&'( , { !"#$%&'()*+ ,  -./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡0(c) Bryan O'Sullivan 2012 BSD-stylebos@serpentine.com provisional GHC >= 7.2None%&9:;<=DQRTˆ‰Š‹ŒŽ‘’“”•–—˜™š›ˆ‰Š‹ŒŽ‘’“”•–—˜™š›k(c) Milan Straka 2010 (c) Johan Tibell 2011 (c) Bryan O'Sullivan 2011, 2012 BSD-stylejohan.tibell@gmail.com provisionalportableNone  k(c) Milan Straka 2010 (c) Johan Tibell 2011 (c) Bryan O'Sullivan 2011, 2012 BSD-stylejohan.tibell@gmail.com provisionalportable Trustworthy0   œ      !"#$%&$'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’’“”•–—˜™š›œžŸ ĄĒĢĪĨ'hashable-1.2.5.0-LiA8hDsyVRvFyCEUjFhiS5 Data.HashableData.Hashable.LiftedData.Hashable.ClassData.Hashable.GenericHashed Hashable2liftHashWithSalt2 Hashable1liftHashWithSaltHashable hashWithSalthash hashWithSalt1 hashWithSalt2defaultLiftHashWithSalt hashUsinghashPtrhashPtrWithSalt hashByteArrayhashByteArrayWithSalthashedunhashed mapHashedtraverseHashed GHashableghc-prim GHC.Classes== defaultSalt distinguisher hashThreadId hashTypeRepGHC.Prim ByteArray#combinebaseGHC.BaseFunctorData.Traversable Traversable $fEqHashed$fHashableComposeSPIntSP ghashWithSaltHashArgs HashArgs0 HashArgs1OneZeroc_hashByteArray c_hashCString getThreadIddefaultHashWithSalt $fShow1Hashed $fOrd1Hashed $fEq1Hashed$fFoldableHashed$fIsStringHashed$fHashable1Hashed$fHashableHashed $fShowHashed $fOrdHashed $fHashableSum$fHashable1Sum$fHashableProduct$fHashable1Product$fHashable1Compose$fHashableOption$fHashableWrappedMonoid$fHashableLast$fHashableFirst $fHashableArg $fHashableMax $fHashableMin$fHashableNonEmpty$fHashable1Proxy$fHashableProxy$fHashable2Const$fHashable1Const$fHashableConst$fHashable1Identity$fHashableIdentity$fHashable1Fixed$fHashableFixed$fHashableVersion$fHashableUnique$fHashableVoid$fHashableTypeRep$fHashableWordPtr$fHashableIntPtr$fHashableFunPtr $fHashablePtr$fHashableThreadId$fHashableText$fHashableText0$fHashableShortByteString$fHashableByteString$fHashableByteString0 $fHashable1[] $fHashable[]$fHashableStableName$fHashable2(,,,,,,)$fHashable1(,,,,,,)$fHashable(,,,,,,)$fHashable2(,,,,,)$fHashable1(,,,,,)$fHashable(,,,,,)$fHashable2(,,,,)$fHashable1(,,,,)$fHashable(,,,,)$fHashable2(,,,)$fHashable1(,,,)$fHashable(,,,)$fHashable2(,,)$fHashable1(,,)$fHashable(,,)$fHashable2(,)$fHashable1(,) $fHashable(,)$fHashable2Either$fHashable1Either$fHashableEither$fHashable1Maybe$fHashableMaybe$fHashableDouble$fHashableFloat$fHashableRatio$fHashableInteger$fHashableNatural$fHashableBigNat$fHashableChar$fHashableOrdering$fHashableBool $fHashable()$fHashableWord64$fHashableWord32$fHashableWord16$fHashableWord8$fHashableWord$fHashableInt64$fHashableInt32$fHashableInt16$fHashableInt8 $fHashableIntTaggedunTaggedSumSizesumSizeGSumhashSum $fSumSizeM1 $fSumSize:+: $fGSumarityM1$fGSumarity:+:$fGHashablearity:+:$fGHashableOne:.:$fGHashableOneRec1$fGHashableOnePar1$fGHashablearityK1$fGHashablearityM1$fGHashablearity:*:$fGHashablearityU1$fGHashablearityV1