Îõ³h*§Œ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹0.1.2.0 Safe-Inferred‰Œlarge-hashablerepresent the CPU endiannessBig endian system stores bytes with the MSB as the first byte. Little endian system stores bytes with the LSB as the first byte.#middle endian is purposely avoided.large-hashablereturn the system endiannessŒŽ Safe-Inferred<Ò large-hashableThe  monad (ã stands for "large hash") is used in the definition of hashing functions for arbitrary data types.large-hashable³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.large-hashableÎFunctions for updating an intermediate hash value. The functions live in the 6 monad because they are typically implemented via FFI.large-hashableadds a byte array to the hashlarge-hashable Perform an  action in the 1 monad. Use with care, do not perform arbitrary É operation with this function! Only use it for calling functions of the  datatype.large-hashableRuns a , computation and returns the resulting hash.    None1=ÂÃÄÅÆÍØÚÛÝÌ‘large-hashable!Support for generically deriving , instances. Any instance of the type class ’ can be made an instance of " by an empty instance declaration.large-hashableÏA 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 “Ä, then the finally computed hashes must also be equal according to “ò. 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 ”ú. 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 “ˆ, 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 l2ËIf 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]large-hashableÍ is the central function of this package. For a given value it computes a Hash using the given 3. The library tries to keep the hash values for  LargeHashableí instances provided by library stable across releases, but there is no guarantee. See @largeHashStable&large-hashable is similar to  largeHashö, but the hash value is guaranteed to remain stable across releases, even if this causes performance to degrade.•large-hashableÙHashes a list of values such the two permutations of the same list yields the same hash.   Safe-Inferred7<mlarge-hashable Converts a  ByteString into a eÇ. Only the first 32 bytes are taken into account, the rest is ignored.olarge-hashable Converts a  ByteString into a iÇ. Only the first 16 bytes are taken into account, the rest is ignored.ijklefghopmnqrijklefghopmnqr Safe-Inferred Ý_€‚ƒ€‚ƒ Safe-Inferred) ‰large-hashable Derive a Á instance with extra constraints in the context of the instance.Šlarge-hashable Derive a = instance with no constraints in the context of the instance.‹large-hashable Derive a 4 instance with a completely custom instance context.–large-hashableãGenerates the error message displayed when somebody tries to let us derive impossible instances!—large-hashableAfter ˆê has matched all the important information this function gets called to build the instance declaration.˜large-hashable0This function generates the declaration for the 2 and the 'updateHashStable functions of the Î typeclass. By taking the constructors with there selected IDs and calling ™> for everyone of them to generate the corresponding clause.™large-hashable™ 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.šlarge-hashableÒGenerate a Pattern that matches the supplied constructor and all of its fields.›large-hashable$Sequences two Expressions using the œ operator.large-hashable?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.žlarge-hashable Returns the Ÿ for a type variable. large-hashableÑAn infinite list of unique names that are used in the generations of patterns.‰large-hashableÖFunction mapping the type variables in the instance head to the additional constraints‹large-hashableœFunction mapping the type variables in the instance head and the constraints that would normally be generated to the constraints that should be generated.ˆ‰Š‹ˆ‰Š‹ Safe-Inferred_!ˆŠ‰‹€‚ƒijklefghopmnqrˆŠ‰‹€‚ƒ¡       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkllmnoopqrstuvwxyz{|}~€‚ƒ„„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š”›œ”›žŸ ¡¢£¤˜¥¦§¨©ª«¬­-large-hashable-0.1.2.0-IBsLGSqTraT5YCxeagNqlbData.LargeHashable.InternData.LargeHashable.ClassData.LargeHashable.LargeWordData.LargeHashable.MD5Data.LargeHashable.THlarge-hashableData.LargeHashable.EndiannessData.LargeHashableLH HashAlgorithmha_runha_xor ha_updateHash HashUpdates hu_updatePtrhu_updateUCharhu_updateUShort hu_updateUInthu_updateULong hashUpdatesioInLHrunLH updateXorHash $fMonadLH$fApplicativeLH $fFunctorLHLargeHashable' updateHash'updateHashStable' LargeHashable updateHashupdateHashStable largeHashlargeHashStableupdateHashListgenericUpdateHash$fGenericLargeHashableM1$fGenericLargeHashable:*:$fGenericLargeHashableV1$fGenericLargeHashableK1$fGenericLargeHashableU1$fLargeHashableSeq$fLargeHashableVoid$fLargeHashableKeyMap$fLargeHashableKey$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$fLargeHashableList$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$fLargeHashableText0$fGenericLargeHashableSumM1$fGenericLargeHashableSum:+:$fGenericLargeHashable:+:Word256 w256_first w256_secondWord128 w128_first w128_secondbsToW256w256ToBsbsToW128w128ToBsxorW128xorW256 $fShowWord256 $fReadWord256 $fEqWord256 $fOrdWord256$fGenericWord256 $fDataWord256 $fShowWord128 $fReadWord128 $fEqWord128 $fOrdWord128$fGenericWord128 $fDataWord128MD5Hash unMD5Hashmd5HashAlgorithmrunMD5 $fReadMD5Hash $fShowMD5Hash $fEqMD5Hash $fOrdMD5HashderiveLargeHashablederiveLargeHashableCtxderiveLargeHashableNoCtxderiveLargeHashableCustomCtx EndiannesssystemEndianness BigEndian LittleEndianghc-prim GHC.TypesIOGenericLargeHashablebase GHC.GenericsGeneric GHC.Classes==EqhashListModuloOrderingnotDeriveAbleErrorMsg buildInstanceupdateHashDeclarationupdateHashClause patternForCon sequenceExpsGHC.Base>>makeConstraintsvarNametemplate-haskellLanguage.Haskell.TH.SyntaxNamenames