module B9.B9Monad
( runB9
, B9
, B9Eff
, IsB9
) where
import B9.B9Config
import B9.B9Error
import B9.B9Logging
import B9.BuildInfo
import B9.Environment
import B9.Repository
import Control.Eff
import Data.Functor ()
type B9 a = Eff B9Eff a
type B9Eff
= '[ SelectedRemoteRepoReader, RepoCacheReader, BuildInfoReader, LoggerReader, B9ConfigReader, EnvironmentReader, ExcB9, Lift IO]
type IsB9 e = (Lifted IO e, CommandIO e, B9Eff <:: e)
runB9 :: B9 a -> B9ConfigAction a
runB9 action = do
cfg <- getB9Config
env <- askEnvironment
lift
(runLift .
errorOnException .
runEnvironmentReader env .
runB9ConfigReader cfg . withLogger . withBuildInfo . withRemoteRepos . withSelectedRemoteRepo $
action)