hyperloglog-0.4.6: An approximate streaming (constant space) unique object counter
Copyright(c) Edward Kmett 2013-2015
LicenseBSD3
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Data.HyperLogLog

Contents

Description

Synopsis

HyperLogLog

data HyperLogLog p Source #

Initialize a new counter:

>>> runHyperLogLog (mempty :: HyperLogLog 3) == V.fromList [0,0,0,0,0,0,0,0]
True

Please 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] :: HyperLogLog 4)
Approximate {_confidence = 0.9972, _lo = 2, _estimate = 9, _hi = 17}

Note how insert can be used to add new observations to the approximate counter.

Instances

Instances details
HasHyperLogLog (HyperLogLog p) (p :: k) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Eq (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Show (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Generic (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Associated Types

type Rep (HyperLogLog p) :: Type -> Type #

Methods

from :: HyperLogLog p -> Rep (HyperLogLog p) x #

to :: Rep (HyperLogLog p) x -> HyperLogLog p #

Semigroup (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Reifies p Integer => Monoid (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Binary (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Methods

put :: HyperLogLog p -> Put #

get :: Get (HyperLogLog p) #

putList :: [HyperLogLog p] -> Put #

Serial (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Methods

serialize :: MonadPut m => HyperLogLog p -> m () #

deserialize :: MonadGet m => m (HyperLogLog p) #

Serialize (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Methods

put :: Putter (HyperLogLog p) #

get :: Get (HyperLogLog p) #

NFData (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

Methods

rnf :: HyperLogLog p -> () #

type Rep (HyperLogLog p) Source # 
Instance details

Defined in Data.HyperLogLog.Type

type Rep (HyperLogLog p) = D1 ('MetaData "HyperLogLog" "Data.HyperLogLog.Type" "hyperloglog-0.4.6-9vzHRrRRBy4LO8h6dQD0lH" 'True) (C1 ('MetaCons "HyperLogLog" 'PrefixI 'True) (S1 ('MetaSel ('Just "runHyperLogLog") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Vector Rank))))

class HasHyperLogLog a p | a -> p where Source #

Instances

Instances details
HasHyperLogLog (HyperLogLog p) (p :: k) Source # 
Instance details

Defined in Data.HyperLogLog.Type

size :: Reifies p Integer => HyperLogLog p -> Approximate Int64 Source #

Approximate size of our set

insertHash :: Reifies s Integer => Word32 -> HyperLogLog s -> HyperLogLog s Source #

Insert a value that has already been hashed by whatever user defined hash function you want.

coerceConfig :: forall p q. (Reifies p Integer, Reifies q Integer) => Maybe (Coercion (HyperLogLog p) (HyperLogLog q)) Source #

If two types p and q reify the same configuration, then we can coerce between HyperLogLog p and HyperLogLog q. We do this by building a hole in the nominal role for the configuration parameter.