module Ribosome.Tmux.Run where import Chiasma.Data.TmuxError (TmuxError) import Chiasma.Monad.Stream (TmuxProg) import qualified Chiasma.Monad.Stream as Chiasma (runTmux) import Chiasma.Native.Api (TmuxNative(TmuxNative)) import Control.Monad.Catch (MonadMask) import Data.DeepPrisms (DeepPrisms) import Ribosome.Config.Setting (settingMaybe) import Ribosome.Config.Settings (tmuxSocket) import Ribosome.Control.Monad.Ribo (MonadRibo, Nvim, Ribo) runTmux :: MonadIO m => MonadRibo m => MonadBaseControl IO m => MonadDeepError e TmuxError m => MonadMask m => Nvim m => TmuxProg m a -> m a runTmux :: TmuxProg m a -> m a runTmux TmuxProg m a prog = do Maybe FilePath socket <- Setting FilePath -> m (Maybe FilePath) forall (m :: * -> *) a. (MonadIO m, Nvim m, MonadRibo m, MsgpackDecode a) => Setting a -> m (Maybe a) settingMaybe Setting FilePath tmuxSocket TmuxNative -> TmuxProg m a -> m a forall (m :: * -> *) e api a. (MonadIO m, MonadDeepError e TmuxError m, TmuxApi m api) => api -> TmuxProg m a -> m a Chiasma.runTmux (Maybe FilePath -> TmuxNative TmuxNative Maybe FilePath socket) TmuxProg m a prog runTmuxE :: MonadIO m => MonadRibo m => MonadBaseControl IO m => MonadMask m => Nvim m => TmuxProg (ExceptT TmuxError m) a -> m (Either TmuxError a) runTmuxE :: TmuxProg (ExceptT TmuxError m) a -> m (Either TmuxError a) runTmuxE = ExceptT TmuxError m a -> m (Either TmuxError a) forall e (m :: * -> *) a. ExceptT e m a -> m (Either e a) runExceptT (ExceptT TmuxError m a -> m (Either TmuxError a)) -> (TmuxProg (ExceptT TmuxError m) a -> ExceptT TmuxError m a) -> TmuxProg (ExceptT TmuxError m) a -> m (Either TmuxError a) forall b c a. (b -> c) -> (a -> b) -> a -> c . TmuxProg (ExceptT TmuxError m) a -> ExceptT TmuxError m a forall (m :: * -> *) e a. (MonadIO m, MonadRibo m, MonadBaseControl IO m, MonadDeepError e TmuxError m, MonadMask m, Nvim m) => TmuxProg m a -> m a runTmux class RunTmux m where runRiboTmux :: TmuxProg m b -> m b instance DeepPrisms e TmuxError => RunTmux (Ribo s e) where runRiboTmux :: TmuxProg (Ribo s e) b -> Ribo s e b runRiboTmux = TmuxProg (Ribo s e) b -> Ribo s e b forall (m :: * -> *) e a. (MonadIO m, MonadRibo m, MonadBaseControl IO m, MonadDeepError e TmuxError m, MonadMask m, Nvim m) => TmuxProg m a -> m a runTmux