{-# 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 v act = do
pSet <- strictIndex
flip runReaderT v $ evalStateT act pSet