-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Generalized system for reading and writing to distributed systems that have primary/replica topologies. -- -- Please see the README on GitHub at -- https://github.com/iand675/multipool#readme @package multipool @version 0.2.0.0 module Data.MultiPool newtype InstanceName backend InstanceName :: Hashed Text -> InstanceName backend [rawInstanceName] :: InstanceName backend -> Hashed Text mkInstanceName :: Text -> InstanceName backend data InstanceDoesNotExist backend InstanceDoesNotExist :: InstanceName backend -> InstanceDoesNotExist backend [instanceDoesNotExist] :: InstanceDoesNotExist backend -> InstanceName backend class Monad m => MultiPoolBackend m backend where { type family Primaries backend :: *; type family Replicas backend :: *; type family LocalPrimary backend :: *; type family LocalReplica backend :: *; type family PrimaryConnection backend :: *; type family ReplicaConnection backend :: *; type family PrimaryIdentifier backend :: *; type family ReplicaIdentifier backend :: *; type Primaries backend = Pool (PrimaryConnection backend); type Replicas backend = HashMap (ReplicaIdentifier backend) (Pool (ReplicaConnection backend)); type LocalPrimary backend = LocalPool (PrimaryConnection backend); type LocalReplica backend = LocalPool (ReplicaConnection backend); type PrimaryIdentifier backend = (); type ReplicaIdentifier backend = InstanceName backend; } runWriteAny :: MultiPoolBackend m backend => MultiPool backend -> ReaderT (PrimaryConnection backend) m a -> m a runWrite :: MultiPoolBackend m backend => MultiPool backend -> PrimaryIdentifier backend -> ReaderT (PrimaryConnection backend) m a -> m a runReadPrimary :: MultiPoolBackend m backend => MultiPool backend -> PrimaryIdentifier backend -> ReaderT (ReplicaConnection backend) m a -> m a runReadAnyPrimary :: MultiPoolBackend m backend => MultiPool backend -> ReaderT (ReplicaConnection backend) m a -> m a runReadAny :: MultiPoolBackend m backend => MultiPool backend -> ReaderT (ReplicaConnection backend) m a -> m a runRead :: MultiPoolBackend m backend => MultiPool backend -> ReplicaIdentifier backend -> ReaderT (ReplicaConnection backend) m a -> m a takePrimary :: MultiPoolBackend m backend => MultiPool backend -> PrimaryIdentifier backend -> m (PrimaryConnection backend, LocalPrimary backend) putPrimary :: MultiPoolBackend m backend => MultiPool backend -> LocalPrimary backend -> PrimaryConnection backend -> m () takeReplica :: MultiPoolBackend m backend => MultiPool backend -> ReplicaIdentifier backend -> m (ReplicaConnection backend, LocalReplica backend) putReplica :: MultiPoolBackend m backend => MultiPool backend -> LocalReplica backend -> ReplicaConnection backend -> m () data MultiPool backend MultiPool :: !Primaries backend -> !Replicas backend -> (MultiPool backend -> IO (PrimaryIdentifier backend)) -> (MultiPool backend -> IO (Maybe (ReplicaIdentifier backend))) -> MultiPool backend [multiPoolPrimary] :: MultiPool backend -> !Primaries backend [multiPoolReplica] :: MultiPool backend -> !Replicas backend [multiPoolAnyPrimarySelector] :: MultiPool backend -> MultiPool backend -> IO (PrimaryIdentifier backend) [multiPoolAnyReplicaSelector] :: MultiPool backend -> MultiPool backend -> IO (Maybe (ReplicaIdentifier backend)) forReplicas :: (MultiPoolBackend m backend, Replicas backend ~ HashMap k v) => MultiPool backend -> (k -> v -> m a) -> m [a] roundRobin :: MonadIO m => [choice] -> m (a -> IO (Maybe choice)) instance GHC.Classes.Eq (Data.MultiPool.InstanceDoesNotExist backend) instance GHC.Show.Show (Data.MultiPool.InstanceDoesNotExist backend) instance GHC.Classes.Ord (Data.MultiPool.InstanceName backend) instance GHC.Classes.Eq (Data.MultiPool.InstanceName backend) instance GHC.Show.Show (Data.MultiPool.InstanceName backend) instance (GHC.Show.Show (Data.MultiPool.InstanceDoesNotExist backend), Data.Typeable.Internal.Typeable backend) => GHC.Exception.Type.Exception (Data.MultiPool.InstanceDoesNotExist backend) instance Data.Hashable.Class.Hashable (Data.MultiPool.InstanceName backend)