crdt 10.2 → 10.3
raw patch · 5 files changed
+15/−9 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- CRDT.Cv.GCounter: instance GHC.Classes.Ord a => Data.Semigroup.Semigroup (CRDT.Cv.GCounter.GCounter a)
- CRDT.Cv.LwwElementSet: instance GHC.Classes.Ord a => Data.Semigroup.Semigroup (CRDT.Cv.LwwElementSet.LwwElementSet a)
- CRDT.Cv.ORSet: instance GHC.Classes.Ord a => Data.Semigroup.Semigroup (CRDT.Cv.ORSet.ORSet a)
- CRDT.Cv.PNCounter: instance GHC.Classes.Ord a => Data.Semigroup.Semigroup (CRDT.Cv.PNCounter.PNCounter a)
- CRDT.Cv.RGA: instance (GHC.Classes.Eq a, Data.Empty.AsEmpty a) => Data.Semigroup.Semigroup (CRDT.Cv.RGA.RGA a)
- CRDT.Cv.TwoPSet: instance GHC.Classes.Ord a => Data.Semigroup.Semigroup (CRDT.Cv.TwoPSet.TwoPSet a)
- CRDT.LWW: instance GHC.Classes.Eq a => Data.Semigroup.Semigroup (CRDT.LWW.LWW a)
- Data.MultiMap: instance (GHC.Classes.Eq v, GHC.Classes.Eq k) => GHC.Classes.Eq (Data.MultiMap.MultiMap k v)
- Data.MultiMap: instance (GHC.Show.Show v, GHC.Show.Show k) => GHC.Show.Show (Data.MultiMap.MultiMap k v)
+ CRDT.Cv.GCounter: instance GHC.Classes.Ord a => GHC.Base.Semigroup (CRDT.Cv.GCounter.GCounter a)
+ CRDT.Cv.LwwElementSet: instance GHC.Classes.Ord a => GHC.Base.Semigroup (CRDT.Cv.LwwElementSet.LwwElementSet a)
+ CRDT.Cv.ORSet: instance GHC.Classes.Ord a => GHC.Base.Semigroup (CRDT.Cv.ORSet.ORSet a)
+ CRDT.Cv.PNCounter: instance GHC.Classes.Ord a => GHC.Base.Semigroup (CRDT.Cv.PNCounter.PNCounter a)
+ CRDT.Cv.RGA: instance (GHC.Classes.Eq a, Data.Empty.AsEmpty a) => GHC.Base.Semigroup (CRDT.Cv.RGA.RGA a)
+ CRDT.Cv.TwoPSet: instance GHC.Classes.Ord a => GHC.Base.Semigroup (CRDT.Cv.TwoPSet.TwoPSet a)
+ CRDT.LWW: instance GHC.Classes.Eq a => GHC.Base.Semigroup (CRDT.LWW.LWW a)
+ CRDT.LamportClock.Simulation: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (CRDT.LamportClock.Simulation.LamportClockSimT m)
+ CRDT.LamportClock.Simulation: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (CRDT.LamportClock.Simulation.ProcessSimT m)
+ Data.MultiMap: instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Data.MultiMap.MultiMap k v)
+ Data.MultiMap: instance (GHC.Show.Show k, GHC.Show.Show v) => GHC.Show.Show (Data.MultiMap.MultiMap k v)
+ Data.Semilattice: instance Data.Semilattice.Semilattice a => Data.Semilattice.Semilattice (GHC.Base.Maybe a)
- CRDT.Cv.Max: newtype Max a :: * -> *
+ CRDT.Cv.Max: newtype Max a
Files
- crdt.cabal +1/−1
- lib/CRDT/Cm/RGA.hs +1/−2
- lib/CRDT/LamportClock.hs +4/−6
- lib/CRDT/LamportClock/Simulation.hs +7/−0
- lib/Data/Semilattice.hs +2/−0
crdt.cabal view
@@ -1,5 +1,5 @@ name: crdt-version: 10.2+version: 10.3 -- ^ ComVer category: Distributed Systems copyright:
lib/CRDT/Cm/RGA.hs view
@@ -84,8 +84,7 @@ case Map.lookupMax vertexIxs of Just (LamportTime maxKnownTime _, _) -> advance maxKnownTime Nothing -> pure ()- newId <- getTime- pure $ OpAddAfter mOldId atom newId+ OpAddAfter mOldId atom <$> getTime makeOp (Remove w) payload | lookup w payload = Just . pure $ OpRemove w
lib/CRDT/LamportClock.hs view
@@ -84,8 +84,10 @@ timeVar <- ask lift $ atomically $ modifyTVar' timeVar $ max time - getTimes n' = do- timeRangeStart <- LamportClock $ do+ getTimes n' = LamportTime <$> getTimes' <*> getPid+ where+ n = max n' 1+ getTimes' = LamportClock $ do timeVar <- ask lift $ do realTime <- getRealLocalTime@@ -94,10 +96,6 @@ let timeRangeStart = max realTime (timeCur + 1) writeTVar timeVar $ timeRangeStart + n - 1 pure timeRangeStart- pid <- getPid- pure $ LamportTime timeRangeStart pid- where- n = max n' 1 instance Process m => Process (ReaderT r m) where getPid = lift getPid
lib/CRDT/LamportClock/Simulation.hs view
@@ -22,6 +22,7 @@ throwError) import Control.Monad.Fail (MonadFail) import qualified Control.Monad.Fail as Fail+import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Reader (ReaderT, ask, runReaderT) import Control.Monad.State.Strict (StateT, evalState, evalStateT, modify, state)@@ -53,6 +54,9 @@ instance Monad m => MonadFail (LamportClockSimT m) where fail = throwError +instance MonadIO m => MonadIO (LamportClockSimT m) where+ liftIO io = LamportClockSim $ liftIO io+ type LamportClockSim = LamportClockSimT Identity -- | ProcessSim inside Lamport clock simulation.@@ -82,6 +86,9 @@ advancePS = \case Nothing -> time Just current -> max time current++instance MonadIO m => MonadIO (ProcessSimT m) where+ liftIO io = ProcessSim $ liftIO io runLamportClockSim :: LamportClockSim a -> Either String a runLamportClockSim (LamportClockSim action) =
lib/Data/Semilattice.hs view
@@ -36,3 +36,5 @@ instance Ord a => Semilattice (Max a) instance Ord a => Semilattice (Set a)++instance Semilattice a => Semilattice (Maybe a)