module Data.Git.Phoenix.App where
import Conduit (MonadUnliftIO, MonadResource)
import Data.Git.Phoenix.CmdArgs
import Data.Git.Phoenix.Io
import Data.Tagged (Tagged)
import Relude
import UnliftIO.QSem qualified as U
type PhoenixM m = (HasCallStack, MonadUnliftIO m, MonadFail m, HasInHandlesSem m)
data PhoenixUberConf
= PhoenixUberConf
{ PhoenixUberConf -> Tagged OutDir FilePath
destObjectDir :: Tagged OutDir FilePath
, PhoenixUberConf -> QSem
inHandlesSem :: U.QSem
}
instance HasInHandlesSem (ReaderT PhoenixUberConf IO) where
getInHandlesSem :: ReaderT PhoenixUberConf IO QSem
getInHandlesSem = (PhoenixUberConf -> QSem) -> ReaderT PhoenixUberConf IO QSem
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks PhoenixUberConf -> QSem
inHandlesSem
type PhoenixUberM m = (PhoenixM m, MonadReader PhoenixUberConf m)
data
=
{ PhoenixExtractConf -> Tagged OutDir FilePath
destGitDir :: Tagged OutDir FilePath
, PhoenixExtractConf -> Tagged InDir FilePath
uberDir :: Tagged InDir FilePath
, PhoenixExtractConf -> QSem
inHandlesSem' :: U.QSem
}
type m = (PhoenixM m, MonadReader PhoenixExtractConf m)
instance HasInHandlesSem (ReaderT PhoenixExtractConf IO) where
getInHandlesSem :: ReaderT PhoenixExtractConf IO QSem
getInHandlesSem = (PhoenixExtractConf -> QSem) -> ReaderT PhoenixExtractConf IO QSem
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks PhoenixExtractConf -> QSem
inHandlesSem'
data PhoenixSearchConf
= PhoenixSearchConf
{ PhoenixSearchConf -> Tagged InDir FilePath
uberRepoDir :: Tagged InDir FilePath
, PhoenixSearchConf -> QSem
inHandlesSem'' :: U.QSem
}
type PhoenixSearchM m = (PhoenixM m, MonadReader PhoenixSearchConf m)
instance HasInHandlesSem (ReaderT PhoenixSearchConf IO) where
getInHandlesSem :: ReaderT PhoenixSearchConf IO QSem
getInHandlesSem = (PhoenixSearchConf -> QSem) -> ReaderT PhoenixSearchConf IO QSem
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks PhoenixSearchConf -> QSem
inHandlesSem''
type PhoenixCoCon m = (PhoenixM m, MonadResource m)