packages feed

ribosome-0.3.0.0: lib/Ribosome/Tmux/Run.hs

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 Control.Monad.DeepError (MonadDeepError)
import Control.Monad.IO.Class (MonadIO)
import Control.Monad.Trans.Except (ExceptT, runExceptT)
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, MonadDeepError e TmuxError m, MonadMask m, Nvim m) =>
  TmuxProg m a ->
  m a
runTmux prog = do
  socket <- settingMaybe tmuxSocket
  Chiasma.runTmux (TmuxNative socket) prog

runTmuxE ::
  (MonadIO m, MonadRibo m, MonadMask m, Nvim m) =>
  TmuxProg (ExceptT TmuxError m) a ->
  m (Either TmuxError a)
runTmuxE =
  runExceptT . runTmux

class RunTmux m where
  runRiboTmux :: TmuxProg m b -> m b

instance DeepPrisms e TmuxError => RunTmux (Ribo s e) where
    runRiboTmux = runTmux