packages feed

riak 1.1.2.5 → 1.1.2.6

raw patch · 11 files changed

+213/−179 lines, 11 filesdep ~riak-protobufdep ~stmPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: riak-protobuf, stm

API changes (from Hackage documentation)

- Network.Riak.CRDT.Ops: instance Data.Semigroup.Semigroup Network.Riak.CRDT.Ops.SetOpsComb
- Network.Riak.CRDT.Types: instance Data.Semigroup.Semigroup Network.Riak.CRDT.Types.Counter
- Network.Riak.CRDT.Types: instance Data.Semigroup.Semigroup Network.Riak.CRDT.Types.CounterOp
- Network.Riak.CRDT.Types: instance Data.Semigroup.Semigroup Network.Riak.CRDT.Types.Flag
- Network.Riak.CRDT.Types: instance Data.Semigroup.Semigroup Network.Riak.CRDT.Types.Register
- Network.Riak.CRDT.Types: instance Data.Semigroup.Semigroup Network.Riak.CRDT.Types.Set
- Network.Riak.Cluster: instance GHC.Exception.Exception Network.Riak.Cluster.InClusterError
- Network.Riak.Connection.Internal: instance GHC.Exception.Exception Network.Riak.Protocol.ErrorResponse.ErrorResponse
- Network.Riak.JSON: instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Network.Riak.JSON.JSON a)
- Network.Riak.Types.Internal: instance GHC.Exception.Exception Network.Riak.Types.Internal.RiakException
+ Network.Riak.CRDT.Ops: instance GHC.Base.Semigroup Network.Riak.CRDT.Ops.SetOpsComb
+ Network.Riak.CRDT.Types: instance GHC.Base.Semigroup Network.Riak.CRDT.Types.Counter
+ Network.Riak.CRDT.Types: instance GHC.Base.Semigroup Network.Riak.CRDT.Types.CounterOp
+ Network.Riak.CRDT.Types: instance GHC.Base.Semigroup Network.Riak.CRDT.Types.Flag
+ Network.Riak.CRDT.Types: instance GHC.Base.Semigroup Network.Riak.CRDT.Types.Register
+ Network.Riak.CRDT.Types: instance GHC.Base.Semigroup Network.Riak.CRDT.Types.Set
+ Network.Riak.Cluster: instance GHC.Exception.Type.Exception Network.Riak.Cluster.InClusterError
+ Network.Riak.Connection.Internal: instance GHC.Exception.Type.Exception Network.Riak.Protocol.ErrorResponse.ErrorResponse
+ Network.Riak.JSON: instance GHC.Base.Semigroup a => GHC.Base.Semigroup (Network.Riak.JSON.JSON a)
+ Network.Riak.Types.Internal: instance GHC.Exception.Type.Exception Network.Riak.Types.Internal.RiakException
- Network.Riak: foldKeys :: (MonadIO m) => Connection -> Maybe BucketType -> Bucket -> (a -> Key -> m a) -> a -> m a
+ Network.Riak: foldKeys :: MonadIO m => Connection -> Maybe BucketType -> Bucket -> (a -> Key -> m a) -> a -> m a
- Network.Riak.Basic: foldKeys :: (MonadIO m) => Connection -> Maybe BucketType -> Bucket -> (a -> Key -> m a) -> a -> m a
+ Network.Riak.Basic: foldKeys :: MonadIO m => Connection -> Maybe BucketType -> Bucket -> (a -> Key -> m a) -> a -> m a
- Network.Riak.CRDT.Types: MapPath :: (NonEmpty ByteString) -> MapPath
+ Network.Riak.CRDT.Types: MapPath :: NonEmpty ByteString -> MapPath
- Network.Riak.CRDT.Types: Set :: (Set ByteString) -> Set
+ Network.Riak.CRDT.Types: Set :: Set ByteString -> Set
- Network.Riak.CRDT.Types: data NonEmpty a :: * -> *
+ Network.Riak.CRDT.Types: data NonEmpty a
- Network.Riak.CRDT.Types: infixr 5 `mapUpdate`
+ Network.Riak.CRDT.Types: infixr 5 :|
- Network.Riak.Connection: pipeline :: (Exchange req resp) => Connection -> [req] -> IO [resp]
+ Network.Riak.Connection: pipeline :: Exchange req resp => Connection -> [req] -> IO [resp]
- Network.Riak.Connection: pipelineMaybe :: (Exchange req resp) => Connection -> [req] -> IO [Maybe resp]
+ Network.Riak.Connection: pipelineMaybe :: Exchange req resp => Connection -> [req] -> IO [Maybe resp]
- Network.Riak.Connection: pipeline_ :: (Request req) => Connection -> [req] -> IO ()
+ Network.Riak.Connection: pipeline_ :: Request req => Connection -> [req] -> IO ()
- Network.Riak.Connection.Internal: pipeline :: (Exchange req resp) => Connection -> [req] -> IO [resp]
+ Network.Riak.Connection.Internal: pipeline :: Exchange req resp => Connection -> [req] -> IO [resp]
- Network.Riak.Connection.Internal: pipelineMaybe :: (Exchange req resp) => Connection -> [req] -> IO [Maybe resp]
+ Network.Riak.Connection.Internal: pipelineMaybe :: Exchange req resp => Connection -> [req] -> IO [Maybe resp]
- Network.Riak.Connection.Internal: pipeline_ :: (Request req) => Connection -> [req] -> IO ()
+ Network.Riak.Connection.Internal: pipeline_ :: Request req => Connection -> [req] -> IO ()
- Network.Riak.Connection.Internal: recvMaybeResponse :: (Response a) => Connection -> IO (Maybe a)
+ Network.Riak.Connection.Internal: recvMaybeResponse :: Response a => Connection -> IO (Maybe a)
- Network.Riak.Connection.Internal: recvResponse :: (Response a) => Connection -> IO a
+ Network.Riak.Connection.Internal: recvResponse :: Response a => Connection -> IO a
- Network.Riak.Connection.Internal: sendRequest :: (Request req) => Connection -> req -> IO ()
+ Network.Riak.Connection.Internal: sendRequest :: Request req => Connection -> req -> IO ()
- Network.Riak.Content: data Content :: *
+ Network.Riak.Content: data Content
- Network.Riak.Content: data Link :: *
+ Network.Riak.Content: data Link
- Network.Riak.Debug: debugValues :: (Show a) => String -> String -> [a] -> IO ()
+ Network.Riak.Debug: debugValues :: Show a => String -> String -> [a] -> IO ()
- Network.Riak.Request: data DeleteRequest :: *
+ Network.Riak.Request: data DeleteRequest
- Network.Riak.Request: data GetBucketRequest :: *
+ Network.Riak.Request: data GetBucketRequest
- Network.Riak.Request: data GetClientIDRequest :: *
+ Network.Riak.Request: data GetClientIDRequest
- Network.Riak.Request: data GetRequest :: *
+ Network.Riak.Request: data GetRequest
- Network.Riak.Request: data GetServerInfoRequest :: *
+ Network.Riak.Request: data GetServerInfoRequest
- Network.Riak.Request: data IndexRequest :: *
+ Network.Riak.Request: data IndexRequest
- Network.Riak.Request: data Link :: *
+ Network.Riak.Request: data Link
- Network.Riak.Request: data ListBucketsRequest :: *
+ Network.Riak.Request: data ListBucketsRequest
- Network.Riak.Request: data ListKeysRequest :: *
+ Network.Riak.Request: data ListKeysRequest
- Network.Riak.Request: data MapReduceRequest :: *
+ Network.Riak.Request: data MapReduceRequest
- Network.Riak.Request: data PingRequest :: *
+ Network.Riak.Request: data PingRequest
- Network.Riak.Request: data PutRequest :: *
+ Network.Riak.Request: data PutRequest
- Network.Riak.Request: data SetBucketRequest :: *
+ Network.Riak.Request: data SetBucketRequest
- Network.Riak.Search: SearchResult :: !(Seq (Seq (ByteString, Maybe ByteString))) -> !(Maybe Float) -> !(Maybe Word32) -> SearchResult
+ Network.Riak.Search: SearchResult :: !Seq (Seq (ByteString, Maybe ByteString)) -> !Maybe Float -> !Maybe Word32 -> SearchResult
- Network.Riak.Search: [docs] :: SearchResult -> !(Seq (Seq (ByteString, Maybe ByteString)))
+ Network.Riak.Search: [docs] :: SearchResult -> !Seq (Seq (ByteString, Maybe ByteString))
- Network.Riak.Search: [maxScore] :: SearchResult -> !(Maybe Float)
+ Network.Riak.Search: [maxScore] :: SearchResult -> !Maybe Float
- Network.Riak.Search: [numFound] :: SearchResult -> !(Maybe Word32)
+ Network.Riak.Search: [numFound] :: SearchResult -> !Maybe Word32
- Network.Riak.Types: SearchResult :: !(Seq (Seq (ByteString, Maybe ByteString))) -> !(Maybe Float) -> !(Maybe Word32) -> SearchResult
+ Network.Riak.Types: SearchResult :: !Seq (Seq (ByteString, Maybe ByteString)) -> !Maybe Float -> !Maybe Word32 -> SearchResult
- Network.Riak.Types: [docs] :: SearchResult -> !(Seq (Seq (ByteString, Maybe ByteString)))
+ Network.Riak.Types: [docs] :: SearchResult -> !Seq (Seq (ByteString, Maybe ByteString))
- Network.Riak.Types: [maxScore] :: SearchResult -> !(Maybe Float)
+ Network.Riak.Types: [maxScore] :: SearchResult -> !Maybe Float
- Network.Riak.Types: [numFound] :: SearchResult -> !(Maybe Word32)
+ Network.Riak.Types: [numFound] :: SearchResult -> !Maybe Word32
- Network.Riak.Types.Internal: SearchResult :: !(Seq (Seq (ByteString, Maybe ByteString))) -> !(Maybe Float) -> !(Maybe Word32) -> SearchResult
+ Network.Riak.Types.Internal: SearchResult :: !Seq (Seq (ByteString, Maybe ByteString)) -> !Maybe Float -> !Maybe Word32 -> SearchResult
- Network.Riak.Types.Internal: [docs] :: SearchResult -> !(Seq (Seq (ByteString, Maybe ByteString)))
+ Network.Riak.Types.Internal: [docs] :: SearchResult -> !Seq (Seq (ByteString, Maybe ByteString))
- Network.Riak.Types.Internal: [maxScore] :: SearchResult -> !(Maybe Float)
+ Network.Riak.Types.Internal: [maxScore] :: SearchResult -> !Maybe Float
- Network.Riak.Types.Internal: [numFound] :: SearchResult -> !(Maybe Word32)
+ Network.Riak.Types.Internal: [numFound] :: SearchResult -> !Maybe Word32
- Network.Riak.Value: get :: (IsContent c) => Connection -> Maybe BucketType -> Bucket -> Key -> R -> IO (Maybe ([c], VClock))
+ Network.Riak.Value: get :: IsContent c => Connection -> Maybe BucketType -> Bucket -> Key -> R -> IO (Maybe ([c], VClock))
- Network.Riak.Value: getMany :: (IsContent c) => Connection -> Maybe BucketType -> Bucket -> [Key] -> R -> IO [Maybe ([c], VClock)]
+ Network.Riak.Value: getMany :: IsContent c => Connection -> Maybe BucketType -> Bucket -> [Key] -> R -> IO [Maybe ([c], VClock)]
- Network.Riak.Value: put :: (IsContent c) => Connection -> Maybe BucketType -> Bucket -> Key -> Maybe VClock -> c -> W -> DW -> IO ([c], VClock)
+ Network.Riak.Value: put :: IsContent c => Connection -> Maybe BucketType -> Bucket -> Key -> Maybe VClock -> c -> W -> DW -> IO ([c], VClock)
- Network.Riak.Value: putIndexed :: (IsContent c) => Connection -> Maybe BucketType -> Bucket -> Key -> [IndexValue] -> Maybe VClock -> c -> W -> DW -> IO ([c], VClock)
+ Network.Riak.Value: putIndexed :: IsContent c => Connection -> Maybe BucketType -> Bucket -> Key -> [IndexValue] -> Maybe VClock -> c -> W -> DW -> IO ([c], VClock)
- Network.Riak.Value: putMany :: (IsContent c) => Connection -> Maybe BucketType -> Bucket -> [(Key, Maybe VClock, c)] -> W -> DW -> IO [([c], VClock)]
+ Network.Riak.Value: putMany :: IsContent c => Connection -> Maybe BucketType -> Bucket -> [(Key, Maybe VClock, c)] -> W -> DW -> IO [([c], VClock)]
- Network.Riak.Value: putMany_ :: (IsContent c) => Connection -> Maybe BucketType -> Bucket -> [(Key, Maybe VClock, c)] -> W -> DW -> IO ()
+ Network.Riak.Value: putMany_ :: IsContent c => Connection -> Maybe BucketType -> Bucket -> [(Key, Maybe VClock, c)] -> W -> DW -> IO ()
- Network.Riak.Value: put_ :: (IsContent c) => Connection -> Maybe BucketType -> Bucket -> Key -> Maybe VClock -> c -> W -> DW -> IO ()
+ Network.Riak.Value: put_ :: IsContent c => Connection -> Maybe BucketType -> Bucket -> Key -> Maybe VClock -> c -> W -> DW -> IO ()

Files

Changes.md view
@@ -1,3 +1,7 @@+* 1.1.2.6+  - Regenerate protobuf for protocol-buffers 2.4.12. (https://github.com/riak-haskell-client/riak-haskell-client/issues/115)+  - Bump riak-protobuf version to 0.24.0.0.+  - Bump riak-protobuf-lens version to 0.24.0.0. * 1.1.2.5   - Bump aeson and exceptions upper bounds. * 1.1.2.4
riak.cabal view
@@ -1,5 +1,5 @@ name:                riak-version:             1.1.2.5+version:             1.1.2.6 synopsis:            A Haskell client for the Riak decentralized data store description:   A Haskell client library for the Riak decentralized data@@ -47,7 +47,7 @@                      tests/test.yaml  cabal-version:       >=1.8-+tested-with: GHC==8.4.4, GHC==8.2.2, GHC==8.0.2 source-repository head     type: git     location: https://github.com:riak-haskell-client/riak-haskell-client.git@@ -124,9 +124,9 @@                 protocol-buffers              >= 2.1.4    && < 2.5,                 pureMD5,                 random,-                riak-protobuf                 == 0.23.*,+                riak-protobuf                 == 0.24.*,                 semigroups                    >= 0.16,-                stm                           == 2.4.*,+                stm                           >= 2.4       && < 2.6,                 text                          == 1.2.*,                 time                          >= 1.4.2     && < 1.9,                 vector                        >= 0.10.12.3 && < 0.13,
src/Network/Riak/Basic.hs view
@@ -1,4 +1,7 @@-{-# LANGUAGE BangPatterns, OverloadedStrings, RecordWildCards, CPP #-}+{-# LANGUAGE BangPatterns      #-}+{-# LANGUAGE CPP               #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards   #-}  -- | -- Module:      Network.Riak.Basic@@ -45,23 +48,23 @@     ) where  #if __GLASGOW_HASKELL__ < 710-import Control.Applicative ((<$>))+import           Control.Applicative                    ((<$>)) #endif-import Control.Monad.IO.Class-import Data.Maybe (fromMaybe)-import Network.Riak.Connection.Internal-import Network.Riak.Escape (unescape)-import Network.Riak.Protocol.BucketProps-import Network.Riak.Protocol.Content-import Network.Riak.Protocol.ListKeysResponse-import Network.Riak.Protocol.MapReduce as MapReduce-import Network.Riak.Protocol.ServerInfo-import Network.Riak.Types.Internal hiding (MessageTag(..))-import qualified Data.Foldable as F-import qualified Data.Sequence as Seq-import qualified Network.Riak.Request as Req-import qualified Network.Riak.Response as Resp-import qualified Network.Riak.Types.Internal as T+import           Control.Monad.IO.Class+import qualified Data.Foldable                          as F+import           Data.Maybe                             (fromMaybe)+import qualified Data.Sequence                          as Seq+import           Network.Riak.Connection.Internal+import           Network.Riak.Escape                    (unescape)+import           Network.Riak.Protocol.BucketProps+import           Network.Riak.Protocol.Content+import           Network.Riak.Protocol.ListKeysResponse+import           Network.Riak.Protocol.MapReduce        as MapReduce+import           Network.Riak.Protocol.ServerInfo+import qualified Network.Riak.Request                   as Req+import qualified Network.Riak.Response                  as Resp+import           Network.Riak.Types.Internal            hiding (MessageTag (..))+import qualified Network.Riak.Types.Internal            as T  -- | Check to see if the connection to the server is alive. ping :: Connection -> IO ()
src/Network/Riak/CRDT.hs view
@@ -1,4 +1,11 @@-{-# LANGUAGE CPP                 #-}+{-# LANGUAGE CPP                    #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses  #-}+{-# LANGUAGE OverloadedStrings      #-}+{-# LANGUAGE PatternGuards          #-}+{-# LANGUAGE ScopedTypeVariables    #-}+{-# LANGUAGE TypeFamilies           #-}+ {- | module:    Network.Riak.CRDT      copyright: (c) 2016 Sentenai      author:    Antonio Nikishaev <me@lelf.lu>@@ -11,7 +18,7 @@     * Haskell values: 'Counter', 'Set' etc      * ADT for operations: 'CounterOp', 'SetOp' etc-    +     * 'modify' to locally modify a value (matching riak-side behaviour)  * Riak-side@@ -32,45 +39,38 @@ Just (DTCounter (Counter 42))  -}-{-# LANGUAGE TypeFamilies, OverloadedStrings, ScopedTypeVariables, PatternGuards #-}-{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-} -module Network.Riak.CRDT (module Network.Riak.CRDT.Types,-                          get,-                          CRDT(..))-    where-+module Network.Riak.CRDT (+    module X+  , get+  , CRDT(..)+  ) where -import Data.Default.Class-import qualified Data.Map as M-import Data.Proxy+import           Data.Default.Class+import qualified Data.Map                as M+import           Data.Proxy #if __GLASGOW_HASKELL__ < 804-import Data.Semigroup+import           Data.Semigroup #endif-import qualified Data.Set as S-import Network.Riak.CRDT.Ops-import Network.Riak.CRDT.Riak-import Network.Riak.CRDT.Types-import Network.Riak.Types-+import qualified Data.Set                as S+import           Network.Riak.CRDT.Ops+import           Network.Riak.CRDT.Riak+import           Network.Riak.CRDT.Types as X+import           Network.Riak.Types  -- | Modify a counter by applying operations ops modifyCounter :: CounterOp -> Counter -> Counter modifyCounter op c = c <> Counter i     where CounterInc i = op -- -- | Modify a set by applying operations ops modifySet :: SetOp -> Set -> Set modifySet op (Set c) = Set (c `S.union` adds S.\\ rems)     where SetOpsComb adds rems = toOpsComb op - modifyMap :: MapOp -> Map -> Map modifyMap (MapRemove field) (Map mc) = Map $ M.delete field mc-modifyMap (MapUpdate path op) m = modifyMap1 path op m-+modifyMap (MapUpdate path op) m      = modifyMap1 path op m  modifyMap1 :: MapPath -> MapValueOp -> Map -> Map modifyMap1 (MapPath (e :| [])) op m = modMap mf op m@@ -85,7 +85,6 @@ modMap :: MapField -> MapValueOp -> Map -> Map modMap ix op (Map m) = Map $ M.alter (Just . modifyMapValue op) ix m - modifyMapValue :: MapValueOp -> Maybe MapEntry -> MapEntry modifyMapValue (MapSetOp op)      = modifyEntry (Proxy :: Proxy Set) op modifyMapValue (MapCounterOp op)  = modifyEntry (Proxy :: Proxy Counter) op@@ -93,14 +92,12 @@ modifyMapValue (MapFlagOp op)     = modifyEntry (Proxy :: Proxy Flag) op modifyMapValue (MapRegisterOp op) = modifyEntry (Proxy :: Proxy Register) op - modifyFlag :: FlagOp -> Flag -> Flag modifyFlag (FlagSet x) = const (Flag x)  modifyRegister :: RegisterOp -> Register -> Register modifyRegister (RegisterSet x) = const (Register x) - -- | Types that can be held inside 'Map' class Default a => MapCRDT a where     type MapOperation_ a :: *@@ -119,38 +116,36 @@     type MapOperation_ Flag = FlagOp     mapModify = modifyFlag     fromEntry (MapFlag f) = Just f-    fromEntry _ = Nothing+    fromEntry _           = Nothing     toEntry = MapFlag  instance MapCRDT Set where     type MapOperation_ Set = SetOp     mapModify = modify     fromEntry (MapSet s) = Just s-    fromEntry _ = Nothing+    fromEntry _          = Nothing     toEntry = MapSet  instance MapCRDT Counter where     type MapOperation_ Counter = CounterOp     mapModify = modify     fromEntry (MapCounter s) = Just s-    fromEntry _ = Nothing+    fromEntry _              = Nothing     toEntry = MapCounter  instance MapCRDT Register where     type MapOperation_ Register = RegisterOp     mapModify = modifyRegister     fromEntry (MapRegister s) = Just s-    fromEntry _ = Nothing+    fromEntry _               = Nothing     toEntry = MapRegister - instance MapCRDT Map where     type MapOperation_ Map = MapOp     mapModify = modify     fromEntry (MapMap s) = Just s-    fromEntry _ = Nothing+    fromEntry _          = Nothing     toEntry = MapMap-  -- | CRDT types class MapCRDT a => CRDT a op | a -> op, op -> a where
src/Network/Riak/CRDT/Ops.hs view
@@ -1,32 +1,37 @@--- | module:    Network.Riak.CRDT.Ops---   copyright: (c) 2016 Sentenai---   author:    Antonio Nikishaev <me@lelf.lu>---   license:   Apache+-- |+-- Module:      Network.Riak.CRDT.Ops+-- Copyright:   (c) 2016 Sentenai+-- Author:      Antonio Nikishaev <me@lelf.lu>+-- License:     Apache+-- Maintainer:  Tim McGilchrist <timmcgil@gmail.com>, Mark Hibberd <mark@hibberd.id.au>+-- Stability:   experimental+-- Portability: portable --+-- -- Conversions of CRDT operations to 'PB.DtOp' ---module Network.Riak.CRDT.Ops (counterUpdateOp,-                              setUpdateOp, SetOpsComb(..), toOpsComb,-                              mapUpdateOp)-    where--import qualified Network.Riak.Protocol.DtOp as PB-import qualified Network.Riak.Protocol.CounterOp as PB-import qualified Network.Riak.Protocol.SetOp as PBSet--import qualified Network.Riak.Protocol.MapOp as PBMap-import qualified Network.Riak.Protocol.MapField as PBMap-import qualified Network.Riak.Protocol.MapField.MapFieldType as PBMap-import qualified Network.Riak.Protocol.MapUpdate as PBMap+module Network.Riak.CRDT.Ops (+    counterUpdateOp+  , setUpdateOp+  , SetOpsComb(..)+  , toOpsComb+  , mapUpdateOp+  ) where -import qualified Network.Riak.Protocol.MapUpdate.FlagOp as PBFlag+import           Data.ByteString.Lazy                        (ByteString)+import           Data.Semigroup                              (Semigroup ((<>)))+import qualified Data.Sequence                               as Seq+import qualified Data.Set                                    as S -import           Data.ByteString.Lazy (ByteString)-import           Data.Semigroup (Semigroup((<>)))-import qualified Data.Sequence as Seq-import qualified Data.Set as S import           Network.Riak.CRDT.Types-+import qualified Network.Riak.Protocol.CounterOp             as PB+import qualified Network.Riak.Protocol.DtOp                  as PB+import qualified Network.Riak.Protocol.MapField              as PBMap+import qualified Network.Riak.Protocol.MapField.MapFieldType as PBMap+import qualified Network.Riak.Protocol.MapOp                 as PBMap+import qualified Network.Riak.Protocol.MapUpdate             as PBMap+import qualified Network.Riak.Protocol.MapUpdate.FlagOp      as PBFlag+import qualified Network.Riak.Protocol.SetOp                 as PBSet  counterUpdateOp :: [CounterOp] -> PB.DtOp counterUpdateOp ops = PB.DtOp { PB.counter_op = Just $ counterOpPB ops,@@ -39,7 +44,7 @@     where CounterInc i = mconcat ops  -data SetOpsComb = SetOpsComb { setAdds :: S.Set ByteString,+data SetOpsComb = SetOpsComb { setAdds    :: S.Set ByteString,                                setRemoves :: S.Set ByteString }              deriving (Show) @@ -51,7 +56,7 @@     (SetOpsComb a b) `mappend` (SetOpsComb x y) = SetOpsComb (a<>x) (b<>y)  toOpsComb :: SetOp -> SetOpsComb-toOpsComb (SetAdd s) = SetOpsComb (S.singleton s) S.empty+toOpsComb (SetAdd s)    = SetOpsComb (S.singleton s) S.empty toOpsComb (SetRemove s) = SetOpsComb S.empty (S.singleton s)  
src/Network/Riak/CRDT/Request.hs view
@@ -1,10 +1,18 @@--- |   module:    Network.Riak.CRDT.Request---     copyright: (c) 2016 Sentenai---     author:    Antonio Nikishaev <me@lelf.lu>---     license:   Apache+-- |+-- Module:      Network.Riak.CRDT.Request+-- Copyright:   (c) 2016 Sentenai+-- Author:      Antonio Nikishaev <me@lelf.lu>+-- License:     Apache+-- Maintainer:  Tim McGilchrist <timmcgil@gmail.com>, Mark Hibberd <mark@hibberd.id.au>+-- Stability:   experimental+-- Portability: portable ---module Network.Riak.CRDT.Request-    (get, counterUpdate, setUpdate, mapUpdate) where+module Network.Riak.CRDT.Request (+    get+  , counterUpdate+  , setUpdate+  , mapUpdate+  ) where  import           Data.ByteString.Lazy (ByteString) import           Network.Riak.CRDT.Ops@@ -28,7 +36,6 @@           -> BucketType -> Bucket -> Key           -> DtUpdate.DtUpdateRequest mapUpdate ops = update (mapUpdateOp ops)-  update :: DtOp.DtOp -> BucketType -> Bucket -> Key -> DtUpdate.DtUpdateRequest update op t b k = DtUpdate.DtUpdateRequest {
src/Network/Riak/CRDT/Response.hs view
@@ -1,29 +1,34 @@--- |   module:    Network.Riak.CRDT.Response---     copyright: (c) 2016 Sentenai---     author:    Antonio Nikishaev <me@lelf.lu>---     license:   Apache+-- |+-- Module:      Network.Riak.CRDT.Response+-- Copyright:   (c) 2016 Sentenai+-- Author:      Antonio Nikishaev <me@lelf.lu>+-- License:     Apache+-- Maintainer:  Tim McGilchrist <timmcgil@gmail.com>, Mark Hibberd <mark@hibberd.id.au>+-- Stability:   experimental+-- Portability: portable --+ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE CPP #-} module Network.Riak.CRDT.Response (get) where  #if __GLASGOW_HASKELL__ <= 708-import Control.Applicative ((<$>))-import Data.Traversable+import           Control.Applicative ((<$>))+import           Data.Traversable #endif import qualified Data.Sequence as Seq import qualified Data.Map as Map-import Data.Foldable (toList)-import Data.Maybe-import Network.Riak.Protocol.DtFetchResponse (DtFetchResponse,value,type')-import Network.Riak.Protocol.DtFetchResponse.DataType (DataType(..))-import Network.Riak.Protocol.DtValue (counter_value,set_value,map_value)+import           Data.Foldable (toList)+import           Data.Maybe (catMaybes)+import           Network.Riak.Protocol.DtFetchResponse (DtFetchResponse,value,type')+import           Network.Riak.Protocol.DtFetchResponse.DataType (DataType(..))+import           Network.Riak.Protocol.DtValue (counter_value,set_value,map_value)  import qualified Network.Riak.Protocol.MapEntry as M (MapEntry(..)) import qualified Network.Riak.Protocol.MapField as M import qualified Network.Riak.Protocol.MapField.MapFieldType as M -import Network.Riak.CRDT.Types as CRDT+import           Network.Riak.CRDT.Types as CRDT  get :: DtFetchResponse -> Maybe CRDT.DataType get resp = case type' resp of
src/Network/Riak/CRDT/Riak.hs view
@@ -1,31 +1,41 @@--- |   module:    Network.Riak.CRDT.Riak---     copyright: (c) 2016 Sentenai---     author:    Antonio Nikishaev <me@lelf.lu>---     license:   Apache+-- |+-- Module:      Network.Riak.CRDT.Riak+-- Copyright:   (c) 2016 Sentenai+-- Author:      Antonio Nikishaev <me@lelf.lu>+-- License:     Apache+-- Maintainer:  Tim McGilchrist <timmcgil@gmail.com>, Mark Hibberd <mark@hibberd.id.au>+-- Stability:   experimental+-- Portability: portable -- -- CRDT operations+-- {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE CPP #-} -module Network.Riak.CRDT.Riak (counterSendUpdate,-                               setSendUpdate,-                               mapSendUpdate,-                               get)-    where+module Network.Riak.CRDT.Riak (+    counterSendUpdate+  , setSendUpdate+  , mapSendUpdate+  , get+  ) where+ #if __GLASGOW_HASKELL__ <= 708 import           Control.Applicative import           Data.Int #endif-import qualified Network.Riak.CRDT.Types as CRDT-import qualified Network.Riak.Connection as Conn-import           Network.Riak.Types-import qualified Network.Riak.Protocol.ErrorResponse as ER+ import           Control.Exception (catchJust)+ import qualified Data.ByteString.Lazy as BS+ import qualified Network.Riak.CRDT.Request as Req import qualified Network.Riak.CRDT.Response as Resp+import qualified Network.Riak.CRDT.Types as CRDT+import qualified Network.Riak.Connection as Conn+import qualified Network.Riak.Protocol.ErrorResponse as ER+import           Network.Riak.Types   counterSendUpdate :: Connection -> BucketType -> Bucket -> Key
src/Network/Riak/CRDT/Types.hs view
@@ -1,57 +1,62 @@--- |   module:    Network.Riak.CRDT.Types---     copyright: (c) 2016 Sentenai---     author:    Antonio Nikishaev <me@lelf.lu>---     license:   Apache--- +-- |+-- Module:      Network.Riak.CRDT.Types+-- Copyright:   (c) 2016 Sentenai+-- Author:      Antonio Nikishaev <me@lelf.lu>+-- License:     Apache+-- Maintainer:  Tim McGilchrist <timmcgil@gmail.com>, Mark Hibberd <mark@hibberd.id.au>+-- Stability:   experimental+-- Portability: portable+-- -- Haskell-side view of CRDT--- -{-# LANGUAGE OverloadedStrings, PatternGuards, GeneralizedNewtypeDeriving, DeriveGeneric #-}-+--+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE DeriveGeneric #-}  module Network.Riak.CRDT.Types (-        -- * Types-        DataType(..),-        -- ** Counters-        Counter(..), Count,-        -- *** Modification-        CounterOp(..),-        -- ** Sets-        Set(..),-        -- *** Modification-        SetOp(..),-        -- ** Maps-        Map(..), MapContent,-        MapField(..),-        MapEntry(..),-        -- *** Inspection-        xlookup,-        -- *** Modification-        MapOp(..), MapPath(..), MapValueOp(..), mapUpdate, (-/),-        -- ** Registers-        Register(..),-        -- *** Modification-        RegisterOp(..),-        -- ** Flags-        Flag(..),-        -- *** Modification-        FlagOp(..),-        -- * Misc-        NonEmpty(..), mapEntryTag, setFromSeq, MapEntryTag(..))-    where-+    -- * Types+    DataType(..)+    -- ** Counters+  , Counter(..), Count+    -- *** Modification+  , CounterOp(..)+    -- ** Sets+  , Set(..)+    -- *** Modification+  , SetOp(..)+    -- ** Maps+  , Map(..), MapContent+  , MapField(..)+  , MapEntry(..)+    -- *** Inspection+  , xlookup+    -- *** Modification+  , MapOp(..), MapPath(..), MapValueOp(..), mapUpdate, (-/)+    -- ** Registers+  , Register(..)+    -- *** Modification+  , RegisterOp(..)+    -- ** Flags+  , Flag(..)+    -- *** Modification+  , FlagOp(..)+    -- * Misc+  , NonEmpty(..), mapEntryTag, setFromSeq, MapEntryTag(..)+  ) where +import           Control.DeepSeq (NFData)+import           Data.ByteString.Lazy (ByteString)+import           Data.Default.Class+import qualified Data.Foldable as F+import           Data.Int (Int64)+import           Data.List.NonEmpty import qualified Data.Map.Strict as M-import qualified Data.Set as S+import           Data.Semigroup import qualified Data.Sequence as Seq-import qualified Data.Foldable as F-import Data.ByteString.Lazy (ByteString)-import Data.Int (Int64)-import Data.List.NonEmpty-import Data.Semigroup-import Data.Default.Class-import Control.DeepSeq (NFData)-import GHC.Generics (Generic)-import Data.String+import qualified Data.Set as S+import           Data.String (IsString(..))+import           GHC.Generics (Generic)   -- | CRDT Map is indexed by MapField, which is a name tagged by a type@@ -63,7 +68,7 @@  -- | CRDT Map is a Data.Map indexed by 'MapField' and holding -- 'MapEntry'.--- +-- -- Maps are specials in a way that they can additionally -- hold 'Flag's, 'Register's, and most importantly, other 'Map's. newtype Map = Map MapContent deriving (Eq,Show,Generic)@@ -109,7 +114,7 @@  -- | map operations -- It's easier to use 'mapUpdate':--- +-- -- >>> "x" -/ "y" -/ "z" `mapUpdate` SetAdd "elem" -- MapUpdate (MapPath ("x" :| ["y","z"])) (MapCounterOp (CounterInc 1)) data MapOp = MapRemove MapField           -- ^ remove value in map@@ -147,7 +152,7 @@  -- | Lookup a value of a given 'MapEntryTag' type on a given 'MapPath' -- inside a map--- +-- -- >>> lookup ("a" -/ "b") MapFlagTag $ { "a"/Map: { "b"/Flag: Flag False } } -- pseudo -- Just (MapFlag (Flag False)) xlookup :: MapPath -> MapEntryTag -> Map -> Maybe MapEntry@@ -161,19 +166,19 @@   -- | Registers can be set to a value--- +-- -- >>> RegisterSet "foo" data RegisterOp = RegisterSet !ByteString deriving (Eq,Show)  -- | Flags can be enabled / disabled--- +-- -- >>> FlagSet True data FlagOp = FlagSet !Bool deriving (Eq,Show)  -- | Flags can only be held as a 'Map' element.--- +-- -- Flag can be set or unset--- +-- -- >>> Flag False newtype Flag = Flag Bool deriving (Eq,Ord,Show,Generic) @@ -192,7 +197,7 @@     def = mempty  -- | Registers can only be held as a 'Map' element.--- +-- -- Register holds a 'ByteString'. newtype Register = Register ByteString deriving (Eq,Show,Generic) @@ -221,7 +226,7 @@   -- | CRDT ADT.--- +-- -- 'Network.Riak.CRDT.Riak.get' operations return value of this type data DataType = DTCounter Counter               | DTSet Set@@ -231,7 +236,7 @@ instance NFData DataType  -- | CRDT Set is a Data.Set--- +-- -- >>> Set (Data.Set.fromList ["foo","bar"]) newtype Set = Set (S.Set ByteString) deriving (Eq,Ord,Show,Generic,Monoid) @@ -245,10 +250,10 @@  -- | CRDT Set operations data SetOp = SetAdd ByteString    -- ^ add element to the set-                                  -- +                                  --                                   -- >>> SetAdd "foo"            | SetRemove ByteString -- ^ remove element from the set-                                  -- +                                  --                                   -- >>> SetRemove "bar"              deriving (Eq,Show) @@ -256,7 +261,7 @@ setFromSeq = Set . S.fromList . F.toList  -- | CRDT Counter hold a integer 'Count'--- +-- -- >>> Counter 42 newtype Counter = Counter Count deriving (Eq,Ord,Num,Show,Generic) type Count = Int64@@ -274,7 +279,7 @@     def = mempty  -- | Counters can be incremented/decremented--- +-- -- >>> CounterInc 1 data CounterOp = CounterInc !Count deriving (Eq,Show) @@ -284,4 +289,3 @@ instance Monoid CounterOp where     mempty = CounterInc 0     CounterInc x `mappend` CounterInc y = CounterInc . getSum $ Sum x <> Sum y-
src/Network/Riak/Connection.hs view
@@ -27,4 +27,4 @@     , pipeline_     ) where -import Network.Riak.Connection.Internal+import           Network.Riak.Connection.Internal
src/Network/Riak/Connection/NoPush.hsc view
@@ -21,7 +21,7 @@ import Foreign.Marshal.Utils (with) import Foreign.Ptr (Ptr) import Foreign.Storable (sizeOf)-import Network.Socket (Socket(..), fdSocket)+import Network.Socket (Socket, fdSocket)  noPush :: CInt #if defined(TCP_NOPUSH)@@ -41,8 +41,9 @@ setNoPush s onOff = do   let v = if onOff then 1 else 0   with v $ \ptr ->-    throwErrnoIfMinus1_ "setNoPush" $-      c_setsockopt (fdSocket s) (#const IPPROTO_TCP) noPush ptr (fromIntegral (sizeOf v))+    throwErrnoIfMinus1_ "setNoPush" $ do+      a <- (fdSocket s)+      c_setsockopt a (#const IPPROTO_TCP) noPush ptr (fromIntegral (sizeOf v))  foreign import ccall unsafe "setsockopt"   c_setsockopt :: CInt -> CInt -> CInt -> Ptr CInt -> CInt -> IO CInt