crdt-0.1: lib/CRDT/GCounter/Cm.hs
{-# LANGUAGE TypeFamilies #-}
module CRDT.GCounter.Cm
( GCounter (..)
, initial
) where
import CRDT.Cm (CmRDT, State, update)
-- | Grow-only counter.
--
-- Commutativity: 'Increment' obviously commutes with itself.
data GCounter a = Increment
instance Num a => CmRDT (GCounter a) where
type State (GCounter a) = a
update _ = (+1)
-- | Initial state
initial :: Num a => a
initial = 0