{-# 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 -- TODO: should this take a 'Maybe Platform' as well? 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