{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
module Package.C.Monad ( PkgM
, MonadPkg
, runPkgM
) where
import Control.Monad.Reader
import Control.Monad.State
import Package.C.Db.Memory
import Package.C.Db.Type
import Package.C.Type.Verbosity
type PkgM = StateT InstallDb (ReaderT Verbosity IO)
type MonadPkg m = (MonadState InstallDb m, MonadReader Verbosity m, MonadIO m)
runPkgM :: Verbosity -> PkgM a -> IO a
runPkgM :: forall a. Verbosity -> PkgM a -> IO a
runPkgM Verbosity
v PkgM a
act = do
InstallDb
pSet <- IO InstallDb
forall (m :: * -> *). MonadIO m => m InstallDb
strictIndex
(ReaderT Verbosity IO a -> Verbosity -> IO a)
-> Verbosity -> ReaderT Verbosity IO a -> IO a
forall a b c. (a -> b -> c) -> b -> a -> c
flip ReaderT Verbosity IO a -> Verbosity -> IO a
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT Verbosity
v (ReaderT Verbosity IO a -> IO a) -> ReaderT Verbosity IO a -> IO a
forall a b. (a -> b) -> a -> b
$ PkgM a -> InstallDb -> ReaderT Verbosity IO a
forall (m :: * -> *) s a. Monad m => StateT s m a -> s -> m a
evalStateT PkgM a
act InstallDb
pSet