crdt-0.3: lib/CRDT/GCounter/Cv/Internal.hs
module CRDT.GCounter.Cv.Internal where
import Data.Semigroup (Semigroup ((<>)))
import Data.IntMap.Strict (IntMap)
import qualified Data.IntMap.Strict as IntMap
import CRDT.Cv (CvRDT)
-- | Grow-only counter.
newtype GCounter a = GCounter (IntMap a)
deriving (Eq, Show)
instance Ord a => Semigroup (GCounter a) where
GCounter x <> GCounter y = GCounter $ IntMap.unionWith max x y
instance Ord a => CvRDT (GCounter a)