module Chiasma.View.State where

import Chiasma.Data.Ident (Ident)
import Chiasma.Data.TmuxId (PaneId)
import Control.Monad.DeepError (MonadDeepError, hoistEither)
import Control.Monad.DeepState (MonadDeepState, gets)

import Chiasma.Data.Views (Views, ViewsError)
import qualified Chiasma.View as Views (paneId)

paneId ::
  (MonadDeepState s Views m, MonadDeepError e ViewsError m) =>
  Ident ->
  m PaneId
paneId :: Ident -> m PaneId
paneId Ident
paneIdent = do
  Either ViewsError PaneId
pid <- (Views -> Either ViewsError PaneId) -> m (Either ViewsError PaneId)
forall s' s (m :: * -> *) a.
MonadDeepState s s' m =>
(s' -> a) -> m a
gets ((Views -> Either ViewsError PaneId)
 -> m (Either ViewsError PaneId))
-> (Views -> Either ViewsError PaneId)
-> m (Either ViewsError PaneId)
forall a b. (a -> b) -> a -> b
$ Ident -> Views -> Either ViewsError PaneId
Views.paneId Ident
paneIdent
  Either ViewsError PaneId -> m PaneId
forall e e' (m :: * -> *) a.
MonadDeepError e e' m =>
Either e' a -> m a
hoistEither Either ViewsError PaneId
pid