module Tendermint.SDK.Modules.Validators
  (
    Validators
  , validatorsModule

  , module Tendermint.SDK.Modules.Validators.Keeper
  , module Tendermint.SDK.Modules.Validators.Types

  , endBlock
  ) where


import           Polysemy                                   (Members)
import           Tendermint.SDK.Application                 (Module (..),
                                                             ModuleEffs)
import           Tendermint.SDK.BaseApp                     (EmptyTxServer (..))
import           Tendermint.SDK.Modules.Validators.EndBlock
import           Tendermint.SDK.Modules.Validators.Keeper
import           Tendermint.SDK.Modules.Validators.Query
import           Tendermint.SDK.Modules.Validators.Types


type Validators = Module ValidatorsName EmptyTxServer EmptyTxServer QueryApi ValidatorsEffs '[]

validatorsModule ::
  Members (ModuleEffs Validators) r =>
  Validators r
validatorsModule :: Validators r
validatorsModule =
  Module :: forall (name :: Symbol) check deliver query (es :: EffectRow)
       (deps :: [Component]) (r :: EffectRow).
RouteTx check r
-> RouteTx deliver r
-> RouteQ query r
-> (forall (s :: EffectRow) a.
    (Members TxEffs s, Members BaseEffs s,
     Members (DependencyEffs deps) s) =>
    Sem (es :& s) a -> Sem s a)
-> Module name check deliver query es deps r
Module
    { moduleTxDeliverer :: RouteTx EmptyTxServer r
moduleTxDeliverer = EmptyTxServer
RouteTx EmptyTxServer r
EmptyTxServer,
      moduleTxChecker :: RouteTx EmptyTxServer r
moduleTxChecker = EmptyTxServer
RouteTx EmptyTxServer r
EmptyTxServer,
      moduleQuerier :: RouteQ QueryApi r
moduleQuerier = RouteQ QueryApi r
forall (r :: EffectRow).
(Members QueryEffs r, Members ValidatorsEffs r) =>
RouteQ QueryApi r
querier,
      moduleEval :: forall (s :: EffectRow) a.
(Members TxEffs s, Members BaseEffs s,
 Members (DependencyEffs '[]) s) =>
Sem (ValidatorsEffs :& s) a -> Sem s a
moduleEval = forall (s :: EffectRow) a.
(Members TxEffs s, Members BaseEffs s,
 Members (DependencyEffs '[]) s) =>
Sem (ValidatorsEffs :& s) a -> Sem s a
forall (r :: EffectRow) a.
Members '[ReadStore, WriteStore, Error AppError] r =>
Sem (ValidatorsKeeper : r) a -> Sem r a
eval
    }