-- 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.1.0.1 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 Masters backend :: *; type family Replicas backend :: *; type family MasterConnection backend :: *; type family ReplicaConnection backend :: *; type family MasterIdentifier backend :: *; type family ReplicaIdentifier backend :: *; type Masters backend = Pool (MasterConnection backend); type Replicas backend = HashMap (ReplicaIdentifier backend) (Pool (ReplicaConnection backend)); type MasterIdentifier backend = (); type ReplicaIdentifier backend = InstanceName backend; } runWriteAny :: MultiPoolBackend m backend => MultiPool backend -> ReaderT (MasterConnection backend) m a -> m a runWrite :: MultiPoolBackend m backend => MultiPool backend -> MasterIdentifier backend -> ReaderT (MasterConnection backend) m a -> m a runReadMaster :: MultiPoolBackend m backend => MultiPool backend -> MasterIdentifier backend -> ReaderT (ReplicaConnection backend) m a -> m a runReadAnyMaster :: 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 data MultiPool backend MultiPool :: !(Masters backend) -> !(Replicas backend) -> (MultiPool backend -> IO (MasterIdentifier backend)) -> (MultiPool backend -> IO (Maybe (ReplicaIdentifier backend))) -> MultiPool backend [multiPoolMaster] :: MultiPool backend -> !(Masters backend) [multiPoolReplica] :: MultiPool backend -> !(Replicas backend) [multiPoolAnyMasterSelector] :: MultiPool backend -> MultiPool backend -> IO (MasterIdentifier 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.Exception (Data.MultiPool.InstanceDoesNotExist backend) instance Data.Hashable.Class.Hashable (Data.MultiPool.InstanceName backend)