{-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE StandaloneDeriving #-} module Chiasma.Data.TmuxThunk( CmdName(..), CmdArgs(..), TmuxThunk(..), TmuxError(..), Cmd(..), Cmds(..), cmd, ) where import Text.ParserCombinators.Parsec (ParseError) import Chiasma.Codec.Decode (TmuxDecodeError) newtype CmdName = CmdName String deriving (Eq, Show) newtype CmdArgs = CmdArgs [String] deriving (Eq, Show) data Cmd = Cmd CmdName CmdArgs deriving (Eq, Show) newtype Cmds = Cmds [Cmd] deriving (Eq, Show) data TmuxError = ProcessFailed Cmds String | OutputParsingFailed Cmds [String] ParseError | NoOutput Cmds | DecodingFailed Cmds String TmuxDecodeError deriving (Eq, Show) data TmuxThunk next = ∀ a . Read Cmd ([String] -> Either TmuxDecodeError a) ([a] -> next) | Write Cmd (() -> next) | Failed TmuxError deriving instance Functor TmuxThunk cmd :: String -> [String] -> Cmd cmd name args = Cmd (CmdName name) (CmdArgs args)