{-# options_haddock prune #-}

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

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

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.GtkClipboard (subscribeEvents)
import Helic.GtkMain (gtkMainLoop)
import Helic.Interpreter.AgentNet (interpretAgentNet)
import Helic.Interpreter.AgentTmux (interpretAgentTmux)
import Helic.Interpreter.AgentX (interpretAgentX)
import Helic.Interpreter.Client (interpretClientNet)
import Helic.Interpreter.Gtk (interpretGtk)
import Helic.Interpreter.GtkClipboard (interpretGtkClipboard)
import Helic.Interpreter.GtkMain (interpretGtkMain)
import Helic.Interpreter.History (interpretHistory)
import Helic.Interpreter.InstanceName (interpretInstanceName)
import Helic.Interpreter.XClipboard (interpretXClipboardGtk)
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 X11Config
x11 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
$
  X11Config
-> InterpreterFor
     (Scoped Display (Gtk Display) !! Text)
     (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 '[Resource, Log, Embed IO] r =>
X11Config
-> InterpreterFor (Scoped Display (Gtk Display) !! Text) r
interpretGtk (X11Config -> Maybe X11Config -> X11Config
forall a. a -> Maybe a -> a
fromMaybe X11Config
forall a. Default a => a
def Maybe X11Config
x11) (Sem
   ((Scoped Display (Gtk Display) !! Text)
      : 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
     ((Scoped Display (Gtk Display) !! Text)
        : 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
$
  MilliSeconds
-> Seconds
-> InterpreterFor
     (GtkMain Display)
     ((Scoped Display (Gtk Display) !! Text)
        : Manager : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
forall s wait restart (r :: [(* -> *) -> * -> *]).
(TimeUnit wait, TimeUnit restart,
 Members '[Resource, Race, Embed IO] r) =>
wait -> restart -> InterpreterFor (GtkMain s) r
interpretGtkMain (Int64 -> MilliSeconds
MilliSeconds Int64
500) (Int64 -> Seconds
Seconds Int64
10) (Sem
   (GtkMain Display
      : (Scoped Display (Gtk Display) !! Text) : Manager
      : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      ((Scoped Display (Gtk Display) !! Text)
         : Manager : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     (GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     ((Scoped Display (Gtk Display) !! Text)
        : 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
  ((Scoped Display GtkClipboard !! Text)
     : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
     : Manager : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     (GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 '[GtkMain Display, Log, Embed IO, Final IO] r =>
InterpreterFor (Scoped Display GtkClipboard !! Text) r
interpretGtkClipboard (Sem
   ((Scoped Display GtkClipboard !! Text)
      : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
      : Manager : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      (GtkMain Display
         : (Scoped Display (Gtk Display) !! Text) : Manager
         : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     ((Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : Manager : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     (GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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
  ((Scoped Display GtkClipboard !! Text)
     : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
     : Manager : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     ((Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : Manager : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     ((Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 s (r :: [(* -> *) -> * -> *]) a.
Members
  '[Scoped resource (Gtk s) !! Text, GtkMain s, Log, Race, Resource,
    Async]
  r =>
Sem r () -> Sem r a -> Sem r a
gtkMainLoop Sem
  ((Scoped Display GtkClipboard !! Text)
     : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
     : Manager : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
forall s res (r :: [(* -> *) -> * -> *]).
Members
  '[Scoped s GtkClipboard !! Text, Events res XClipboardEvent, Log]
  r =>
Sem r ()
subscribeEvents (Sem
   ((Scoped Display GtkClipboard !! Text)
      : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
      : Manager : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      ((Scoped Display GtkClipboard !! Text)
         : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
         : Manager : Reader InstanceName : AtomicState (Seq Event)
         : Events (OutChan Event) Event : ChanConsumer Event
         : Events (OutChan XClipboardEvent) XClipboardEvent
         : ChanConsumer XClipboardEvent : Reader NetConfig
         : Reader TmuxConfig : AppStack)
      ())
-> Sem
     ((Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : Manager : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     ((Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 !! Text)
     : (Scoped Display GtkClipboard !! Text) : GtkMain Display
     : (Scoped Display (Gtk Display) !! Text) : Manager
     : Reader InstanceName : AtomicState (Seq Event)
     : Events (OutChan Event) Event : ChanConsumer Event
     : Events (OutChan XClipboardEvent) XClipboardEvent
     : ChanConsumer XClipboardEvent : Reader NetConfig
     : Reader TmuxConfig : AppStack)
  ()
-> Sem
     ((Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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
  '[Scoped resource GtkClipboard !! Text, Log, Embed IO, Final IO]
  r =>
InterpreterFor (XClipboard !! Text) r
interpretXClipboardGtk (Sem
   ((XClipboard !! Text)
      : (Scoped Display GtkClipboard !! Text) : GtkMain Display
      : (Scoped Display (Gtk Display) !! Text) : Manager
      : Reader InstanceName : AtomicState (Seq Event)
      : Events (OutChan Event) Event : ChanConsumer Event
      : Events (OutChan XClipboardEvent) XClipboardEvent
      : ChanConsumer XClipboardEvent : Reader NetConfig
      : Reader TmuxConfig : AppStack)
   ()
 -> Sem
      ((Scoped Display GtkClipboard !! Text)
         : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
         : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : Manager
        : Reader InstanceName : AtomicState (Seq Event)
        : Events (OutChan Event) Event : ChanConsumer Event
        : Events (OutChan XClipboardEvent) XClipboardEvent
        : ChanConsumer XClipboardEvent : Reader NetConfig
        : Reader TmuxConfig : AppStack)
     ()
-> Sem
     ((Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
     : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
     : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text, ChronosTime]
   r,
 Members
   '[Events xr XClipboardEvent, Log, Error Text, Race, Resource,
     Async, Embed IO, Final IO]
   r) =>
InterpreterFor (Tagged AgentX Agent) r
interpretAgentX (Sem
   (Tagged AgentX Agent
      : (XClipboard !! Text) : (Scoped Display GtkClipboard !! Text)
      : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
      : 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 !! Text)
         : (Scoped Display GtkClipboard !! Text) : GtkMain Display
         : (Scoped Display (Gtk Display) !! Text) : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
     : (Scoped Display GtkClipboard !! Text) : GtkMain Display
     : (Scoped Display (Gtk Display) !! Text) : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 !! Text)
      : (Scoped Display GtkClipboard !! Text) : GtkMain Display
      : (Scoped Display (Gtk Display) !! Text) : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
         : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
         : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
     : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
     : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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, ChronosTime,
    Embed IO]
  r =>
InterpreterFor (Tagged AgentTmux Agent) r
interpretAgentTmux (Sem
   (Tagged AgentTmux Agent
      : Tagged AgentNet Agent : Tagged AgentX Agent
      : (XClipboard !! Text) : (Scoped Display GtkClipboard !! Text)
      : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
      : 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 !! Text)
         : (Scoped Display GtkClipboard !! Text) : GtkMain Display
         : (Scoped Display (Gtk Display) !! Text) : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 !! Text)
      : (Scoped Display GtkClipboard !! Text) : GtkMain Display
      : (Scoped Display (Gtk Display) !! Text) : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
         : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
         : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text) : (Scoped Display GtkClipboard !! Text)
        : GtkMain Display : (Scoped Display (Gtk Display) !! Text)
        : 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 !! Text)
     : (Scoped Display GtkClipboard !! Text) : GtkMain Display
     : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
      : (Scoped Display GtkClipboard !! Text) : GtkMain Display
      : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
         : (Scoped Display GtkClipboard !! Text) : GtkMain Display
         : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
     : (Scoped Display GtkClipboard !! Text) : GtkMain Display
     : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
     : (Scoped Display GtkClipboard !! Text) : GtkMain Display
     : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
      : (Scoped Display GtkClipboard !! Text) : GtkMain Display
      : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
         : (Scoped Display GtkClipboard !! Text) : GtkMain Display
         : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
         : (Scoped Display GtkClipboard !! Text) : GtkMain Display
         : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 !! Text)
        : (Scoped Display GtkClipboard !! Text) : GtkMain Display
        : (Scoped Display (Gtk Display) !! Text) : 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 X11Config
_ 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 X11Config
_ 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 X11Config
_ 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)