packages feed

chiasma-0.10.0.0: lib/Chiasma/Effect/TmuxClient.hs

module Chiasma.Effect.TmuxClient where

import Prelude hiding (send)

import Chiasma.Data.TmuxRequest (TmuxRequest)
import Chiasma.Data.TmuxResponse (TmuxResponse)

data TmuxClient (i :: Type) (o :: Type) :: Effect where
  Send :: i -> TmuxClient i o m o
  Schedule :: i -> TmuxClient i o m ()

makeSem ''TmuxClient

type ScopedTmux i o =
  Scoped_ (TmuxClient i o)

type NativeTmux =
  ScopedTmux TmuxRequest TmuxResponse

flush ::
  Member (TmuxClient e d) r =>
  InterpreterFor (TmuxClient e d) r
flush =
  interpret \case
    Send cmd ->
      send cmd
    Schedule cmd ->
      void (send cmd)