diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -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
 
diff --git a/crjdt-haskell.cabal b/crjdt-haskell.cabal
--- a/crjdt-haskell.cabal
+++ b/crjdt-haskell.cabal
@@ -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
diff --git a/examples/Main.hs b/examples/Main.hs
deleted file mode 100644
--- a/examples/Main.hs
+++ /dev/null
@@ -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
diff --git a/src/Data/Crjdt.hs b/src/Data/Crjdt.hs
--- a/src/Data/Crjdt.hs
+++ b/src/Data/Crjdt.hs
@@ -62,7 +62,7 @@
 (.>) :: b -> (b -> a) -> a
 (.>) = (&)
 
-infixl 4 .>
+infixl 6 .>
 
 -- |'emptyMap' corresponds to {}.
 emptyMap :: Val
diff --git a/src/Data/Crjdt/Context.hs b/src/Data/Crjdt/Context.hs
--- a/src/Data/Crjdt/Context.hs
+++ b/src/Data/Crjdt/Context.hs
@@ -26,8 +26,6 @@
   , findChild
   , applyOp
   , getPresence
-  , setPath
-  , setFinalKey
   , lookupCtx
   , appendWith
   , docKey
diff --git a/src/Data/Crjdt/Eval.hs b/src/Data/Crjdt/Eval.hs
--- a/src/Data/Crjdt/Eval.hs
+++ b/src/Data/Crjdt/Eval.hs
@@ -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
diff --git a/src/Data/Crjdt/Types.hs b/src/Data/Crjdt/Types.hs
--- a/src/Data/Crjdt/Types.hs
+++ b/src/Data/Crjdt/Types.hs
@@ -66,7 +66,6 @@
 
 sequenceNumber = fst . getId
 replicaNumber = snd . getId
-
 mkId sn rid = Id (sn, rid)
 
 tagWith :: tag -> BasicKey -> Key tag
