dZ1      !"#$%&'()*+,-./0None0CThe  monad (c stands for "large hash") is used in the definition of hashing functions for arbitrary data types.The interface for a hashing algorithm. The interface contains a simple run function, which is used to update the hash with all values needed, and the outputs the resulting hash.NFunctions for updating an intermediate hash value. The functions live in the 16 monad because they are typically implemented via FFI.adds a byte array to the hash Perform an 1 action in the 1 monad. Use with care, do not perform arbitrary 1I operation with this function! Only use it for calling functions of the  datatype.Runs a , computation and returns the resulting hash.$23456 789:;<=>?@  23456  789:;<=>?@None14KLA!Support for generically deriving , instances. Any instance of the type class B can be made an instance of " by an empty instance declaration.OA type class for computing hashes (i.e. MD5, SHA256, ...) from haskell values.-The laws of this typeclass are the following: &If two values are equal according to CD, then the finally computed hashes must also be equal according to Cr. However it is not required that the hashes of inequal values have to be inequal. Also note that an instance of ! does not require a instance of Dz. Using any sane algorithm the chance of a collision should be 1 / n where n is the number of different hashes possible.(If two values are inequal according to C, then the probability of a hash collision is 1/n, where n is the number of possible hashes produced by the underlying hash algorithm.A rule of thumb: hash all information that you would also need for serializing/deserializing values of your datatype. For instance, when hashing lists, you would not only hash the list elements but also the length of the list. Consider the following datatype data Foo = Foo [Int] [Int]4We now write an instance for LargeHashable like this \instance LargeHashable Foo where updateHash (Foo l1 l2) = updateHash l1 >> updateHash l2KIf we did not hash the length of a list, then the following two values of Foo would produce identical hashes: Foo [1,2,3] [] Foo [1] [2,3]M is the central function of this package. For a given value it computes a Hash using the given .EYHashes a list of values such the two permutations of the same list yields the same hash.eAFGHIJKLMNOPQRSTUVWEXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~bAFGHIJKLMNOPQRSTUVWEXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None BTemplate Haskell function to automatically derive instances of '. The derived instances first calls H with an unique identifier number for every constructor, followed by _ calls for every field of the constructor (if existent). It also works for type families.E. g. for the following code j data BlaFoo a = Foo | Bar Int a | Baz a a $(deriveLargeHashable ''BlaFoo) &The following instance gets generated: rinstance LargeHashable a_apg8 => LargeHashable (BlaFoo a_apg8) where updateHash Foo = updateHash (0 :: Foreign.C.Types.CULong) updateHash (Bar a b) = (((updateHash (1 :: Foreign.C.Types.CULong)) >> (updateHash a)) >> (updateHash b)) updateHash (XY a b) = (((updateHash (2 :: Foreign.C.Types.CULong)) >> (updateHash a)) >> (updateHash b))  Derive a A instance with extra constraints in the context of the instance. Derive a = instance with no constraints in the context of the instance. Derive a 4 instance with a completely custom instance context.cGenerates the error message displayed when somebody tries to let us derive impossible instances!After j has matched all the important information this function gets called to build the instance declaration.0This function generates the declaration for the  function of the N typeclass. By taking the constructors with there selected IDs and calling > for everyone of them to generate the corresponding clause. generates a clause of the  function. It makes sure all the fields are matched correctly and updates the hash with the neccessary information about the constructor (its ID) and all of its fields.RGenerate a Pattern that matches the supplied constructor and all of its fields.4Sequences two Expressions using the '(>>)' operator.?Generates the constraints needed for the declaration of the * class. This means that the constraint LargeHashable $TypeVar$2 is added for every type variable the type has. Returns the  for a type variable.QAn infinite list of unique names that are used in the generations of patterns. VFunction mapping the type variables in the instance head to the additional constraintsFunction mapping the type variables in the instance head and the constraints that would normally be generated to the constraints that should be generated. Safe+0& Converts a  ByteString into a G. Only the first 32 bytes are taken into account, the rest is ignored.( Converts a  ByteString into a "G. Only the first 16 bytes are taken into account, the rest is ignored. !"#$%&'()*+ !"#$%&'()*+"#$% !()&'*+  !"#$%&'()*+NoneN,-./0,-./0,-./0,-./0None !"#$%&'()*+,-./0,-./0       !"##$%&&'()*+,-.//01234566789:;<=>?@ABCDEF3GH3GIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~large_6zhqDYr2sveESPrmGICrYSData.LargeHashable.InternData.LargeHashable.ClassData.LargeHashable.THData.LargeHashable.LargeWordData.LargeHashable.MD5Data.LargeHashableLH HashAlgorithmha_runha_xor ha_updateHash HashUpdates hu_updatePtr hu_updateCharhu_updateUCharhu_updateShorthu_updateUShort hu_updateInt hu_updateUInt hu_updateLonghu_updateULong hashUpdatesioInLHrunLH updateXorHashLargeHashable' updateHash' LargeHashable updateHash largeHashderiveLargeHashablederiveLargeHashableCtxderiveLargeHashableNoCtxderiveLargeHashableCustomCtxWord256 w256_first w256_secondWord128 w128_first w128_secondbsToW256w256ToBsbsToW128w128ToBsxorW128xorW256MD5Hash unMD5Hashmd5HashAlgorithmrunMD5ghc-prim GHC.TypesIOLHEnv lh_updateslh_updateXorHashlhFmaplhReturnlhApplhBindlhBind'getUpdateXorHashrunLH' $fMonadLH$fApplicativeLH $fFunctorLHGenericLargeHashablebase GHC.GenericsGeneric GHC.Classes==EqhashListModuloOrderingupdateHashGeneric floatToWord32doubleToWord64updateHashTextDataupdateHashTextupdateHashLazyTextupdateHashByteStringDataupdateHashByteStringupdateHashLazyByteStringupdateHashWithFunupdateHashIntegerupdateHashFixedupdateHashBoolupdateHashList setFoldFun updateHashSetupdateHashIntSetupdateHashHashSet mapFoldFun updateHashMapupdateHashIntMapupdateHashHashMapupdateHashTupleupdateHashTripleupdateHashQuadrupleupdateHashQuintupleupdateHashMaybe$fGenericLargeHashableM1$fGenericLargeHashableK1$fGenericLargeHashable:*:$fGenericLargeHashable:+:$fGenericLargeHashableU1$fGenericLargeHashableV1$fLargeHashableSeq$fLargeHashableVoid$fLargeHashableValue$fLargeHashableScientific$fLargeHashablePair$fLargeHashableVector$fLargeHashableUniversalTime$fLargeHashableDay$fLargeHashableUTCTime$fLargeHashableTimeZone$fLargeHashableTimeOfDay$fLargeHashableZonedTime$fLargeHashableLocalTime$fLargeHashableNominalDiffTime$fLargeHashableDiffTime$fLargeHashableAbsoluteTime$fLargeHashableRatio$fLargeHashableOrdering$fLargeHashable()$fLargeHashableEither$fLargeHashableMaybe$fLargeHashable(,,,,)$fLargeHashable(,,,)$fLargeHashable(,,)$fLargeHashable(,)$fLargeHashableHashMap$fLargeHashableIntMap$fLargeHashableMap$fLargeHashableHashSet$fLargeHashableIntSet$fLargeHashableSet$fLargeHashable[]$fLargeHashableBool$fLargeHashableFixed$fLargeHashableFloat$fLargeHashableDouble$fLargeHashableInteger$fLargeHashableChar$fLargeHashableCULong$fLargeHashableCUInt$fLargeHashableCUShort$fLargeHashableCUChar$fLargeHashableCLong$fLargeHashableCInt$fLargeHashableCShort$fLargeHashableCChar$fLargeHashableWord64$fLargeHashableWord32$fLargeHashableWord16$fLargeHashableWord8$fLargeHashableWord$fLargeHashableInt64$fLargeHashableInt32$fLargeHashableInt16$fLargeHashableInt8$fLargeHashableInt$fLargeHashableShortByteString$fLargeHashableByteString$fLargeHashableByteString0$fLargeHashableText$fLargeHashableText0notDeriveAbleErrorMsg buildInstanceupdateHashDeclarationupdateHashClause patternForCon sequenceExpsmakeConstraintsvarNametemplate-haskellLanguage.Haskell.TH.SyntaxNamenamesw64ToBsbsToW64Ctx_unCtxRawCtxc_md5_finalizec_md5_update_ulongc_md5_update_longc_md5_update_uintc_md5_update_intc_md5_update_ushortc_md5_update_shortc_md5_update_ucharc_md5_update_char c_md5_update c_md5_init digestSizesizeCtxwithCtx $fShowMD5Hash