packages feed

crjdt-haskell 0.2.1 → 0.3.0

raw patch · 8 files changed

+26/−66 lines, 8 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

- Data.Crjdt: infixl 4 .>
- Data.Crjdt.Context: setFinalKey :: Key Void -> Cursor -> Cursor
- Data.Crjdt.Context: setPath :: Seq (Key Tag) -> Cursor -> Cursor
+ Data.Crjdt: infixl 6 .>
- Data.Crjdt: eval :: Ctx m => Expr -> m Result
+ Data.Crjdt: eval :: Ctx m => Expr -> m Cursor
- Data.Crjdt.Eval: eval :: Ctx m => Expr -> m Result
+ Data.Crjdt.Eval: eval :: Ctx m => Expr -> m Cursor

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+0.3.0++* BREAKING CHANGE: Remove unnecessarry exports+* BREAKING CHANGE: Fix fixity of (.>), it now binds more tightly than (=:)+ 0.2.1  * Generalize helper function sync
README.md view
@@ -13,25 +13,22 @@ ```haskell  {-# LANGUAGE OverloadedStrings #-}+ module Main where  import Data.Crjdt as C  -- Original state original :: Command ()-original = (doc .> key "key") =: "A"+original = doc .> key "key" =: "A"  -- First replica updates doc["key"] to "B" replica1 :: Command ()-replica1 = do-  original-  (doc .> key "key") =: "B"+replica1 = original *> doc .> key "key" =: "B"  -- Second replica updates doc["key"] to "C" replica2 :: Command ()-replica2 = do-  original-  (doc .> key "key") =: "C"+replica2 = original *> doc .> key "key" =: "C"  main :: IO () main = do@@ -43,7 +40,6 @@    -- Both replicas converge to: {"key": {"B", "C"}}   print (document replica1' == document replica2') -- True- ```  ## Future work@@ -51,6 +47,10 @@ * Improve documentation * Aeson support * Simplify API as described in [second version](https://arxiv.org/abs/1608.03960) of the paper++## Other implementations++* [Scala CRJDT](https://github.com/fthomas/crjdt)  ## LICENSE 
crjdt-haskell.cabal view
@@ -1,5 +1,5 @@ name:          crjdt-haskell-version:       0.2.1+version:       0.3.0 synopsis:      A Conflict-Free Replicated JSON Datatype for Haskell description:   A Conflict-Free Replicated JSON Datatype for Haskell homepage:      https://github.com/amarpotghan/crjdt-haskell#readme@@ -13,7 +13,7 @@ cabal-version: >=1.10  extra-source-files:  README.md-                   , CHANGELOG.md 	+                   , CHANGELOG.md  library   hs-source-dirs:      src@@ -43,13 +43,6 @@   ghc-options:         -threaded -rtsopts -with-rtsopts=-N   other-modules: Data.CrjdtSpec                , Data.FigureSpec-  default-language:    Haskell2010--executable examples-  main-is: Main.hs-  hs-source-dirs: examples-  build-depends: base >= 4.7 && < 5-               , crjdt-haskell   default-language:    Haskell2010  source-repository head
− examples/Main.hs
@@ -1,31 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-module Main where--import Data.Crjdt as C---- Original state-original :: Command ()-original = (doc .> key "key") =: "A"---- First replica updates doc["key"] to "B"-replica1 :: Command ()-replica1 = do-  original-  (doc .> key "key") =: "B"---- Second replica updates doc["key"] to "C"-replica2 :: Command ()-replica2 = do-  original-  (doc .> key "key") =: "C"--main :: IO ()-main = do-  -- Sync first and second replica-  let Right (r1, r2) = sync (1, replica1) (2, replica2)--  let replica1' = execEval 1 r1-      replica2' = execEval 2 r2--  -- Both replicas converge to: {"key": {"B", "C"}}-  print (document replica1' == document replica2') -- True
src/Data/Crjdt.hs view
@@ -62,7 +62,7 @@ (.>) :: b -> (b -> a) -> a (.>) = (&) -infixl 4 .>+infixl 6 .>  -- |'emptyMap' corresponds to {}. emptyMap :: Val
src/Data/Crjdt/Context.hs view
@@ -26,8 +26,6 @@   , findChild   , applyOp   , getPresence-  , setPath-  , setFinalKey   , lookupCtx   , appendWith   , docKey
src/Data/Crjdt/Eval.hs view
@@ -44,17 +44,15 @@ instance Exception EvalError  newtype Eval a = Eval-  { runEval :: ExceptT EvalError (State Context) a-  } deriving-  ( Functor-  , Applicative-  , Monad-  , MonadFix-  , MonadError EvalError-  , MonadState Context-  )--type Result = Cursor+  { runEval :: ExceptT EvalError (State Context) a }+  deriving+    ( Functor+    , Applicative+    , Monad+    , MonadFix+    , MonadError EvalError+    , MonadState Context+    )  initial :: ReplicaId -> Context initial rid = Context@@ -115,7 +113,6 @@           , history = Set.insert (opId op) (history cc)           }   in traverse_ applyRemote' (received c)-{-# INLINE applyRemote #-}  applyLocal :: Ctx m => Mutation -> Cursor -> m () applyLocal mut cur = modify $ \c ->@@ -130,9 +127,8 @@        , history = Set.insert (opId op) (history c)        , queue = queue c Seq.|> op        }-{-# INLINE applyLocal #-} -eval :: Ctx m => Expr -> m Result+eval :: Ctx m => Expr -> m Cursor eval Doc = pure $ Cursor Seq.empty $ unTag docKey eval (GetKey expr k) = do   cursor <- eval expr
src/Data/Crjdt/Types.hs view
@@ -66,7 +66,6 @@  sequenceNumber = fst . getId replicaNumber = snd . getId- mkId sn rid = Id (sn, rid)  tagWith :: tag -> BasicKey -> Key tag