{-# options_haddock prune #-}

-- |App entry points, Internal
module Helic.App where

import Polysemy.Chronos (ChronosTime)
import qualified Polysemy.Conc as Conc
import Polysemy.Conc (
  Critical,
  Interrupt,
  interpretAtomic,
  interpretEventsChan,
  interpretSync,
  withAsync_,
  )
import Polysemy.Http (Manager)
import Polysemy.Http.Interpreter.Manager (interpretManager)
import Polysemy.Log (
  Log,
  Logger,
  )
import Polysemy.Time (GhcTime)

import Helic.Data.Config (Config (Config))
import Helic.Data.Event (Event)
import Helic.Data.ListConfig (ListConfig)
import Helic.Data.LoadConfig (LoadConfig (LoadConfig))
import Helic.Data.NetConfig (NetConfig)
import Helic.Data.XClipboardEvent (XClipboardEvent)
import Helic.Data.YankConfig (YankConfig)
import qualified Helic.Effect.Client as Client
import Helic.Effect.Client (Client)
import qualified Helic.Effect.History as History
import Helic.Interpreter.AgentNet (interpretAgentNet)
import Helic.Interpreter.AgentTmux (interpretAgentTmux)
import Helic.Interpreter.AgentX (interpretAgentX)
import Helic.Interpreter.Client (interpretClientNet)
import Helic.Interpreter.History (interpretHistory)
import Helic.Interpreter.InstanceName (interpretInstanceName)
import Helic.Interpreter.XClipboard (interpretXClipboardGtk, listenXClipboard)
import Helic.List (list)
import Helic.Net.Api (serve)
import Helic.Yank (yank)

type IOStack =
  [
    Error Text,
    Logger,
    Interrupt,
    Critical,
    ChronosTime,
    GhcTime,
    Race,
    Async,
    Resource,
    Embed IO,
    Final IO
  ]

type AppStack =
    Log : IOStack

listenApp ::
  Config ->
  Sem AppStack ()
listenApp :: Config -> Sem AppStack ()
listenApp (Config Maybe Text
name Maybe TmuxConfig
tmux Maybe NetConfig
net Maybe Int
maxHistory Maybe Bool
_) =
  TmuxConfig
-> Sem (Reader TmuxConfig : AppStack) () -> Sem AppStack ()
forall i (r :: [(* -> *) -> * -> *]) a.
i -> Sem (Reader i : r) a -> Sem r a
runReader (TmuxConfig -> Maybe TmuxConfig -> TmuxConfig
forall a. a -> Maybe a -> a
fromMaybe TmuxConfig
forall a. Default a => a
def Maybe TmuxConfig
tmux) (Sem (Reader TmuxConfig : AppStack) () -> Sem AppStack ())
-> Sem (Reader TmuxConfig : AppStack) () -> Sem AppStack ()
forall a b. (a -> b) -> a -> b
$
  NetConfig
-> Sem (Reader NetConfig : Reader TmuxConfig : AppStack) ()
-> Sem (Reader TmuxConfig : AppStack) ()
forall i (r :: [(* -> *) -> * -> *]) a.
i -> Sem (Reader i : r) a -> Sem r a
runReader (NetConfig -> Maybe NetConfig -> NetConfig
forall a. a -> Maybe a -> a
fromMaybe NetConfig
forall a. Default a => a
def Maybe NetConfig
net) (Sem (Reader NetConfig : Reader TmuxConfig : AppStack) ()
 -> Sem (Reader TmuxConfig : AppStack) ())
-> Sem (Reader NetConfig : Reader TmuxConfig : AppStack) ()
-> Sem (Reader TmuxConfig : AppStack) ()
forall a b. (a -> b) -> a -> b
$
  forall (r :: [(* -> *) -> * -> *]).
Members '[Resource, Race, Async, Embed IO] r =>
InterpretersFor
  '[Events (OutChan XClipboardEvent) XClipboardEvent,
    ChanConsumer XClipboardEvent]
  r
forall e (r :: [(* -> *) -> * -> *]).
Members '[Resource, Race, Async, Embed IO] r =>
InterpretersFor '[Events (OutChan e) e, ChanConsumer e] r
interpretEventsChan @XClipboardEvent (Sem
   (Append
      '[Events (OutChan XClipboardEvent) XClipboardEvent,
        ChanConsumer XClipboardEvent]
      (Reader NetConfig : Reader TmuxConfig : AppStack))
   ()
 -> Sem (Reader NetConfig : Reader TmuxConfig : AppStack) ())
-> Sem
     (Append
        '[Events (OutChan XClipboardEvent) XClipboardEvent,
          ChanConsumer XClipboardEvent]
        (Reader NetConfig : Reader TmuxConfig : AppStack))
     ()
-> Sem (Reader NetConfig : Reader TmuxConfig : AppStack) ()
forall a b. (a -> b) -> a -> b
$
  forall (r :: [(* -> *) -> * -> *]).
Members '[Resource, Race, Async, Embed IO] r =>
InterpretersFor
  '[Events (OutChan Event) Event, ChanConsumer Event] r
forall e (r :: [(* -> *) -> * -> *]).
Members '[Resource, Race, Async, Embed IO] r =>
InterpretersFor '[Events (OutChan e) e, ChanConsumer e] r
interpretEventsChan @Event (Sem
   (Append
      '[Events (OutChan Event) Event, ChanConsumer Event]
      (Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack))
   ()
 -> Sem
      (Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Append
        '[Events (OutChan Event) Event, ChanConsumer Event]
        (Events (OutChan XClipboardEvent) XClipboardEvent
           : ChanConsumer XClipboardEvent : Reader NetConfig
           : Reader TmuxConfig : AppStack))
     ()
-> Sem
     (Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Seq Event
-> InterpreterFor
     (AtomicState (Seq Event))
     (Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
forall a (r :: [(* -> *) -> * -> *]).
Member (Embed IO) r =>
a -> InterpreterFor (AtomicState a) r
interpretAtomic Seq Event
forall a. Monoid a => a
mempty (Sem
   (AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (Events (OutChan Event) Event
         : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Maybe Text
-> InterpreterFor
     (Reader InstanceName)
     (AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
forall (r :: [(* -> *) -> * -> *]).
Members '[Error Text, Embed IO] r =>
Maybe Text -> InterpreterFor (Reader InstanceName) r
interpretInstanceName Maybe Text
name (Sem
   (Reader InstanceName
      : AtomicState (Seq Event) : Events (OutChan Event) Event
      : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Manager
     : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall (r :: [(* -> *) -> * -> *]).
Member (Embed IO) r =>
InterpreterFor Manager r
interpretManager (Sem
   (Manager
      : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (Reader InstanceName
         : AtomicState (Seq Event) : Events (OutChan Event) Event
         : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Reader GtkState
     : Manager : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall resource (r :: [(* -> *) -> * -> *]).
Members
  '[Events resource XClipboardEvent, Log, Error Text, Race, Resource,
    Async, Embed IO, Final IO]
  r =>
InterpreterFor (Reader GtkState) r
listenXClipboard (Sem
   (Reader GtkState
      : Manager : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (Manager
         : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Reader GtkState
        : Manager : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (XClipboard
     : Reader GtkState : Manager : Reader InstanceName
     : AtomicState (Seq Event) : Events (OutChan Event) Event
     : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (Reader GtkState
        : Manager : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall (r :: [(* -> *) -> * -> *]).
Members '[Reader GtkState, Log, Embed IO, Final IO] r =>
InterpreterFor XClipboard r
interpretXClipboardGtk (Sem
   (XClipboard
      : Reader GtkState : Manager : Reader InstanceName
      : AtomicState (Seq Event) : Events (OutChan Event) Event
      : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (Reader GtkState
         : Manager : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (XClipboard
        : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Reader GtkState
        : Manager : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Tagged AgentX Agent
     : XClipboard : Reader GtkState : Manager : Reader InstanceName
     : AtomicState (Seq Event) : Events (OutChan Event) Event
     : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (XClipboard
        : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall xr er (r :: [(* -> *) -> * -> *]).
(Members
   '[EventConsumer xr XClipboardEvent, Events er Event,
     Reader InstanceName, XClipboard, ChronosTime]
   r,
 Members
   '[Events xr XClipboardEvent, Error Text, Race, Resource, Async,
     Embed IO, Final IO]
   r) =>
InterpreterFor (Tagged AgentX Agent) r
interpretAgentX (Sem
   (Tagged AgentX Agent
      : XClipboard : Reader GtkState : Manager : Reader InstanceName
      : AtomicState (Seq Event) : Events (OutChan Event) Event
      : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (XClipboard
         : Reader GtkState : Manager : Reader InstanceName
         : AtomicState (Seq Event) : Events (OutChan Event) Event
         : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Tagged AgentX Agent
        : XClipboard : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (XClipboard
        : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Tagged AgentNet Agent
     : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
     : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (Tagged AgentX Agent
        : XClipboard : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall (r :: [(* -> *) -> * -> *]).
(Members '[Manager, Reader NetConfig] r,
 Members
   '[Log, Interrupt, Race, Resource, Async, Embed IO, Final IO] r) =>
InterpreterFor (Tagged AgentNet Agent) r
interpretAgentNet (Sem
   (Tagged AgentNet Agent
      : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
      : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (Tagged AgentX Agent
         : XClipboard : Reader GtkState : Manager : Reader InstanceName
         : AtomicState (Seq Event) : Events (OutChan Event) Event
         : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Tagged AgentX Agent
        : XClipboard : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Tagged AgentTmux Agent
     : Tagged AgentNet Agent : Tagged AgentX Agent : XClipboard
     : Reader GtkState : Manager : Reader InstanceName
     : AtomicState (Seq Event) : Events (OutChan Event) Event
     : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall (r :: [(* -> *) -> * -> *]).
Members
  '[Reader TmuxConfig, Log, Async, Race, Resource, Embed IO] r =>
InterpreterFor (Tagged AgentTmux Agent) r
interpretAgentTmux (Sem
   (Tagged AgentTmux Agent
      : Tagged AgentNet Agent : Tagged AgentX Agent : XClipboard
      : Reader GtkState : Manager : Reader InstanceName
      : AtomicState (Seq Event) : Events (OutChan Event) Event
      : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (Tagged AgentNet Agent
         : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
         : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Tagged AgentTmux Agent
        : Tagged AgentNet Agent : Tagged AgentX Agent : XClipboard
        : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Maybe Int
-> InterpreterFor
     History
     (Tagged AgentTmux Agent
        : Tagged AgentNet Agent : Tagged AgentX Agent : XClipboard
        : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
forall (r :: [(* -> *) -> * -> *]).
(Members Agents r,
 Members
   '[Reader InstanceName, AtomicState (Seq Event), ChronosTime, Log]
   r) =>
Maybe Int -> InterpreterFor History r
interpretHistory Maybe Int
maxHistory (Sem
   (History
      : Tagged AgentTmux Agent : Tagged AgentNet Agent
      : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
      : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (Tagged AgentTmux Agent
         : Tagged AgentNet Agent : Tagged AgentX Agent : XClipboard
         : Reader GtkState : Manager : Reader InstanceName
         : AtomicState (Seq Event) : Events (OutChan Event) Event
         : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (History
        : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Tagged AgentTmux Agent
        : Tagged AgentNet Agent : Tagged AgentX Agent : XClipboard
        : Reader GtkState : Manager : Reader InstanceName
        : AtomicState (Seq Event) : Events (OutChan Event) Event
        : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Sync ServerReady
     : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
     : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
     : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (History
        : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall d (r :: [(* -> *) -> * -> *]).
Members '[Race, Embed IO] r =>
InterpreterFor (Sync d) r
interpretSync (Sem
   (Sync ServerReady
      : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
      : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
      : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (History
         : Tagged AgentTmux Agent : Tagged AgentNet Agent
         : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
         : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Sync ServerReady
        : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (History
        : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Sync ServerReady
     : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
     : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
     : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (Sync ServerReady
        : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Sync ServerReady
        : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall (r :: [(* -> *) -> * -> *]) b a.
Members '[Resource, Race, Async] r =>
Sem r b -> Sem r a -> Sem r a
withAsync_ Sem
  (Sync ServerReady
     : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
     : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
     : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
forall (r :: [(* -> *) -> * -> *]).
Members
  '[History, Reader NetConfig, Sync ServerReady, Log, Interrupt,
    Final IO]
  r =>
Sem r ()
serve (Sem
   (Sync ServerReady
      : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
      : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
      : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (Sync ServerReady
         : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
         : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
         : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Sync ServerReady
        : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (Sync ServerReady
        : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall a b. (a -> b) -> a -> b
$
  (Event
 -> Sem
      (Sync ServerReady
         : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
         : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
         : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (Sync ServerReady
        : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall e token (r :: [(* -> *) -> * -> *]).
Member (EventConsumer token e) r =>
(e -> Sem r ()) -> Sem r ()
Conc.subscribeLoop Event
-> Sem
     (Sync ServerReady
        : History : Tagged AgentTmux Agent : Tagged AgentNet Agent
        : Tagged AgentX Agent : XClipboard : Reader GtkState : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
forall (r :: [(* -> *) -> * -> *]).
Member History r =>
Event -> Sem r ()
History.receive

yankApp ::
  Config ->
  YankConfig ->
  Sem AppStack ()
yankApp :: Config -> YankConfig -> Sem AppStack ()
yankApp (Config Maybe Text
name Maybe TmuxConfig
_ Maybe NetConfig
net Maybe Int
_ Maybe Bool
_) YankConfig
yankConfig =
  Sem (Manager : AppStack) () -> Sem AppStack ()
forall (r :: [(* -> *) -> * -> *]).
Member (Embed IO) r =>
InterpreterFor Manager r
interpretManager (Sem (Manager : AppStack) () -> Sem AppStack ())
-> Sem (Manager : AppStack) () -> Sem AppStack ()
forall a b. (a -> b) -> a -> b
$
  Maybe Text
-> InterpreterFor (Reader InstanceName) (Manager : AppStack)
forall (r :: [(* -> *) -> * -> *]).
Members '[Error Text, Embed IO] r =>
Maybe Text -> InterpreterFor (Reader InstanceName) r
interpretInstanceName Maybe Text
name (Sem (Reader InstanceName : Manager : AppStack) ()
 -> Sem (Manager : AppStack) ())
-> Sem (Reader InstanceName : Manager : AppStack) ()
-> Sem (Manager : AppStack) ()
forall a b. (a -> b) -> a -> b
$
  NetConfig
-> Sem
     (Reader NetConfig : Reader InstanceName : Manager : AppStack) ()
-> Sem (Reader InstanceName : Manager : AppStack) ()
forall i (r :: [(* -> *) -> * -> *]) a.
i -> Sem (Reader i : r) a -> Sem r a
runReader (NetConfig -> Maybe NetConfig -> NetConfig
forall a. a -> Maybe a -> a
fromMaybe NetConfig
forall a. Default a => a
def Maybe NetConfig
net) (Sem
   (Reader NetConfig : Reader InstanceName : Manager : AppStack) ()
 -> Sem (Reader InstanceName : Manager : AppStack) ())
-> Sem
     (Reader NetConfig : Reader InstanceName : Manager : AppStack) ()
-> Sem (Reader InstanceName : Manager : AppStack) ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Client
     : Reader NetConfig : Reader InstanceName : Manager : AppStack)
  ()
-> Sem
     (Reader NetConfig : Reader InstanceName : Manager : AppStack) ()
forall (r :: [(* -> *) -> * -> *]).
Members
  '[Manager, Reader NetConfig, Log, Error Text, Race, Embed IO] r =>
InterpreterFor Client r
interpretClientNet (Sem
   (Client
      : Reader NetConfig : Reader InstanceName : Manager : AppStack)
   ()
 -> Sem
      (Reader NetConfig : Reader InstanceName : Manager : AppStack) ())
-> Sem
     (Client
        : Reader NetConfig : Reader InstanceName : Manager : AppStack)
     ()
-> Sem
     (Reader NetConfig : Reader InstanceName : Manager : AppStack) ()
forall a b. (a -> b) -> a -> b
$
  YankConfig
-> Sem
     (Client
        : Reader NetConfig : Reader InstanceName : Manager : AppStack)
     ()
forall (r :: [(* -> *) -> * -> *]).
Members
  '[Reader InstanceName, Client, ChronosTime, Error Text, Embed IO]
  r =>
YankConfig -> Sem r ()
yank YankConfig
yankConfig

runClient ::
  Members [Log, Error Text, Race, Embed IO] r =>
  Maybe NetConfig ->
  InterpretersFor [Client, Reader NetConfig, Manager] r
runClient :: Maybe NetConfig
-> InterpretersFor '[Client, Reader NetConfig, Manager] r
runClient Maybe NetConfig
net =
  Sem (Manager : r) a -> Sem r a
forall (r :: [(* -> *) -> * -> *]).
Member (Embed IO) r =>
InterpreterFor Manager r
interpretManager (Sem (Manager : r) a -> Sem r a)
-> (Sem (Client : Reader NetConfig : Manager : r) a
    -> Sem (Manager : r) a)
-> Sem (Client : Reader NetConfig : Manager : r) a
-> Sem r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  NetConfig
-> Sem (Reader NetConfig : Manager : r) a -> Sem (Manager : r) a
forall i (r :: [(* -> *) -> * -> *]) a.
i -> Sem (Reader i : r) a -> Sem r a
runReader (NetConfig -> Maybe NetConfig -> NetConfig
forall a. a -> Maybe a -> a
fromMaybe NetConfig
forall a. Default a => a
def Maybe NetConfig
net) (Sem (Reader NetConfig : Manager : r) a -> Sem (Manager : r) a)
-> (Sem (Client : Reader NetConfig : Manager : r) a
    -> Sem (Reader NetConfig : Manager : r) a)
-> Sem (Client : Reader NetConfig : Manager : r) a
-> Sem (Manager : r) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  Sem (Client : Reader NetConfig : Manager : r) a
-> Sem (Reader NetConfig : Manager : r) a
forall (r :: [(* -> *) -> * -> *]).
Members
  '[Manager, Reader NetConfig, Log, Error Text, Race, Embed IO] r =>
InterpreterFor Client r
interpretClientNet

listApp ::
  Config ->
  ListConfig ->
  Sem AppStack ()
listApp :: Config -> ListConfig -> Sem AppStack ()
listApp (Config Maybe Text
_ Maybe TmuxConfig
_ Maybe NetConfig
net Maybe Int
_ Maybe Bool
_) ListConfig
listConfig =
  ListConfig
-> Sem (Reader ListConfig : AppStack) () -> Sem AppStack ()
forall i (r :: [(* -> *) -> * -> *]) a.
i -> Sem (Reader i : r) a -> Sem r a
runReader ListConfig
listConfig (Sem (Reader ListConfig : AppStack) () -> Sem AppStack ())
-> Sem (Reader ListConfig : AppStack) () -> Sem AppStack ()
forall a b. (a -> b) -> a -> b
$
  Maybe NetConfig
-> InterpretersFor
     '[Client, Reader NetConfig, Manager] (Reader ListConfig : AppStack)
forall (r :: [(* -> *) -> * -> *]).
Members '[Log, Error Text, Race, Embed IO] r =>
Maybe NetConfig
-> InterpretersFor '[Client, Reader NetConfig, Manager] r
runClient Maybe NetConfig
net (Sem
   (Append
      '[Client, Reader NetConfig, Manager]
      (Reader ListConfig : AppStack))
   ()
 -> Sem (Reader ListConfig : AppStack) ())
-> Sem
     (Append
        '[Client, Reader NetConfig, Manager]
        (Reader ListConfig : AppStack))
     ()
-> Sem (Reader ListConfig : AppStack) ()
forall a b. (a -> b) -> a -> b
$
  Sem
  (Append
     '[Client, Reader NetConfig, Manager]
     (Reader ListConfig : AppStack))
  ()
forall (r :: [(* -> *) -> * -> *]).
Members '[Reader ListConfig, Client, Error Text, Embed IO] r =>
Sem r ()
list

loadApp ::
  Config ->
  LoadConfig ->
  Sem AppStack ()
loadApp :: Config -> LoadConfig -> Sem AppStack ()
loadApp (Config Maybe Text
_ Maybe TmuxConfig
_ Maybe NetConfig
net Maybe Int
_ Maybe Bool
_) (LoadConfig Int
event) =
  Maybe NetConfig
-> InterpretersFor '[Client, Reader NetConfig, Manager] AppStack
forall (r :: [(* -> *) -> * -> *]).
Members '[Log, Error Text, Race, Embed IO] r =>
Maybe NetConfig
-> InterpretersFor '[Client, Reader NetConfig, Manager] r
runClient Maybe NetConfig
net (Sem (Append '[Client, Reader NetConfig, Manager] AppStack) ()
 -> Sem AppStack ())
-> Sem (Append '[Client, Reader NetConfig, Manager] AppStack) ()
-> Sem AppStack ()
forall a b. (a -> b) -> a -> b
$
  (Sem (Client : Reader NetConfig : Manager : AppStack) Event
-> Sem (Client : Reader NetConfig : Manager : AppStack) ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Sem (Client : Reader NetConfig : Manager : AppStack) Event
 -> Sem (Client : Reader NetConfig : Manager : AppStack) ())
-> (Either Text Event
    -> Sem (Client : Reader NetConfig : Manager : AppStack) Event)
-> Either Text Event
-> Sem (Client : Reader NetConfig : Manager : AppStack) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Either Text Event
-> Sem (Client : Reader NetConfig : Manager : AppStack) Event
forall e (r :: [(* -> *) -> * -> *]) a.
Member (Error e) r =>
Either e a -> Sem r a
fromEither (Either Text Event
 -> Sem (Client : Reader NetConfig : Manager : AppStack) ())
-> Sem
     (Client : Reader NetConfig : Manager : AppStack)
     (Either Text Event)
-> Sem (Client : Reader NetConfig : Manager : AppStack) ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Int
-> Sem
     (Client : Reader NetConfig : Manager : AppStack)
     (Either Text Event)
forall (r :: [(* -> *) -> * -> *]).
Member Client r =>
Int -> Sem r (Either Text Event)
Client.load Int
event)