h*%      !"#$0.5 BSD-style#Vincent Hanquez  experimentalgood Safe-Inferred% hyperloglogSiphash tag value hyperloglog SigHash Key& hyperloglog.produce a siphash with a key and a bytestring.' hyperloglogsame as &, except also specifies the number of sipround iterations for compression and digest.(%)&'(c) Edward Kmett 2013-2015BSD3Edward Kmett  experimental non-portable Safe-Inferred01    (c) Edward Kmett 2013-2025BSD3Edward Kmett  experimental non-portable Safe-Inferred0< hyperloglogInitialize a new counter:runHyperLogLog (mempty :: DefaultHyperLogLog 3) == V.fromList [0,0,0,0,0,0,0,0]True4Please note how you specify a counter size with the n invocation. Sizes of up to 16 are valid, with 7 being a likely good minimum for decent accuracy.?Let's count a list of unique items and get the latest estimate::size (foldr insert mempty [1..10] :: DefaultHyperLogLog 4)Approximate {_confidence = 0.9972, _lo = 2, _estimate = 9, _hi = 17} Note how  can be used to add new observations to the approximate counter.The s type parameter configures the + that is passed to the hash function when ing a new value. Note that if cryptographic security is a primary consideration, it is recommended that you create  values using  so that the ? is randomly generated using system entropy. In contrast, the  data constructor and the * method allow constructing  values with fixed s, which can result in exponentially inaccurate estimates if exploited by an adversary. (See  !https://eprint.iacr.org/2021/1139.) hyperloglog Construct a  value directly from a +.;Note that using this data constructor directly permits the s type parameter to be a fixed , which can have cryptographic security implications. See the Haddocks for  for more details. hyperloglog Promote a ( to the type level for use as part of a  type. hyperloglogGenerate a fresh " value using a randomly generated :generateHyperLogLog $ \(m :: HyperLogLog s 3) -> pure (runHyperLogLog m == V.fromList [0,0,0,0,0,0,0,0])TrueThe  is generated using system entropy, so if cryptographic security is a primary consideration, use this function to create a = value instead of manually building one (e.g., by using the  data constructor or by using *). hyperloglogIf the two types p and q5 reify the same configuration, and if the two types r and s reify the same , then we can coerce between  r p and  s q(. We do this by building a hole in the nominal& role for the configuration parameter. hyperloglogInsert a value that has already been hashed by whatever user defined hash function you want. hyperloglogApproximate size of our set hyperloglogThe , instance "should" just work. Give me two estimators and I can give you an estimator for the union set of the two.Note that using * permits the s type parameter to be a fixed , which can have cryptographic security implications. See the Haddocks for  for more details.    (c) Edward Kmett 2013-2015BSD3Edward Kmett  experimental non-portable Safe-Inferred    -      !"#$%&'()*+,*-./012-.34&hyperloglog-0.5-GLIkAycmUmjIt8AcGSsiYsData.HyperLogLog.TypeData.HyperLogLog.Config hyperloglogCrypto.MAC.SipHashData.HyperLogLogSipKeyRanklim32 numBuckets smallRange interRangerawFactalpha bucketMask calcBucketcalcRankHasHyperLogLog hyperLogLogDefaultHyperLogLog DefaultSipKey HyperLogLogrunHyperLogLog reifySipKeygenerateHyperLogLog coerceConfiginsert insertHashsizeintersectionSizecast$fMonoidHyperLogLog$fSemigroupHyperLogLog$fBinaryHyperLogLog$fSerialHyperLogLog$fSerializeHyperLogLog $fReifiesTYPEDefaultSipKeySipKey$fHasHyperLogLogkkHyperLogLogsp$fEqHyperLogLog$fShowHyperLogLog$fGenericHyperLogLog$fNFDataHyperLogLogSipHashhashhashWithbaseGHC.Basemempty&vector-0.13.2.0-8KHgSOzHm25KQXK2hlnMqsData.Vector.Unboxed.BaseVectorMonoid