{-# LANGUAGE ScopedTypeVariables #-}

module Chiasma.Monad.Tmux(
  Chiasma.Monad.Tmux.read,
  write,
  TmuxProg,
) where

import Control.Monad.Free (Free, liftF)
import Chiasma.Codec (TmuxCodec, TmuxQuery(unQ))
import qualified Chiasma.Codec as TmuxCodec (TmuxCodec(decode, query))
import Chiasma.Data.TmuxThunk (TmuxThunk(..), cmd)

type TmuxProg = Free TmuxThunk

read ::  a . TmuxCodec a => String -> [String] -> TmuxProg [a]
read name args =
  liftF $ Read (cmd name (args ++ ["-F", "'" ++ unQ (TmuxCodec.query @a) ++ "'"])) TmuxCodec.decode id

write :: String -> [String] -> TmuxProg ()
write name args = liftF $ Write (cmd name args) id