module Chiasma.Interpreter.Codec where import Chiasma.Codec (TmuxCodec) import Chiasma.Data.CodecError (CodecError (CodecError)) import Chiasma.Data.DecodeError (DecodeError) import qualified Chiasma.Data.Panes as Panes import Chiasma.Data.Panes (Panes) import qualified Chiasma.Data.TmuxCommand as TmuxCommand import Chiasma.Data.TmuxCommand (TmuxCommand) import Chiasma.Data.TmuxRequest (TmuxRequest) import Chiasma.Data.TmuxResponse (TmuxResponse) import qualified Chiasma.Effect.Codec as Codec import Chiasma.Effect.Codec (Codec) interpretCodecNative :: (∀ x . cmd x -> TmuxRequest) -> (∀ x . TmuxResponse -> cmd x -> Either DecodeError x) -> InterpreterFor (Codec cmd TmuxRequest TmuxResponse !! CodecError) r interpretCodecNative :: forall (cmd :: * -> *) (r :: [Effect]). (forall x. cmd x -> TmuxRequest) -> (forall x. TmuxResponse -> cmd x -> Either DecodeError x) -> InterpreterFor (Codec cmd TmuxRequest TmuxResponse !! CodecError) r interpretCodecNative forall x. cmd x -> TmuxRequest enc forall x. TmuxResponse -> cmd x -> Either DecodeError x dec = (forall x (r0 :: [Effect]). Codec cmd TmuxRequest TmuxResponse (Sem r0) x -> Tactical (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) (Sem r0) (Stop CodecError : r) x) -> InterpreterFor (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) r forall err (eff :: Effect) (r :: [Effect]). (forall x (r0 :: [Effect]). eff (Sem r0) x -> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x) -> InterpreterFor (Resumable err eff) r interpretResumableH \case Codec.Encode cmd a1 cmd -> x -> Sem (WithTactics (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) f (Sem r0) (Stop CodecError : r)) (f x) forall (f :: * -> *) a (e :: Effect) (m :: * -> *) (r :: [Effect]). Functor f => a -> Sem (WithTactics e f m r) (f a) pureT (cmd a1 -> TmuxRequest forall x. cmd x -> TmuxRequest enc cmd a1 cmd) Codec.WithCodec cmd x cmd TmuxRequest -> Sem r0 TmuxResponse use -> do let req :: TmuxRequest req = cmd x -> TmuxRequest forall x. cmd x -> TmuxRequest enc cmd x cmd f TmuxResponse out <- Sem r0 TmuxResponse -> Tactical (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) (Sem r0) (Stop CodecError : r) TmuxResponse forall (m :: * -> *) a (e :: Effect) (r :: [Effect]). m a -> Tactical e m r a runTSimple (TmuxRequest -> Sem r0 TmuxResponse use TmuxRequest req) Inspector forall x. f x -> Maybe x ins <- Sem (WithTactics (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) f (Sem r0) (Stop CodecError : r)) (Inspector f) forall (e :: Effect) (f :: * -> *) (m :: * -> *) (r :: [Effect]). Sem (WithTactics e f m r) (Inspector f) getInspectorT x -> Sem (WithTactics (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) f (Sem r0) (Stop CodecError : r)) (f x) forall (f :: * -> *) a (e :: Effect) (m :: * -> *) (r :: [Effect]). Functor f => a -> Sem (WithTactics e f m r) (f a) pureT (x -> Sem (WithTactics (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) f (Sem r0) (Stop CodecError : r)) (f x)) -> Sem (WithTactics (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) f (Sem r0) (Stop CodecError : r)) x -> Sem (WithTactics (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) f (Sem r0) (Stop CodecError : r)) (f x) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< (DecodeError -> CodecError) -> Either DecodeError x -> Sem (WithTactics (Resumable CodecError (Codec cmd TmuxRequest TmuxResponse)) f (Sem r0) (Stop CodecError : r)) x forall err err' (r :: [Effect]) a. Member (Stop err') r => (err -> err') -> Either err a -> Sem r a stopEitherWith (TmuxRequest -> DecodeError -> CodecError CodecError TmuxRequest req) (TmuxResponse -> cmd x -> Either DecodeError x forall x. TmuxResponse -> cmd x -> Either DecodeError x dec (Maybe TmuxResponse -> TmuxResponse forall m. Monoid m => Maybe m -> m forall (t :: * -> *) m. (Foldable t, Monoid m) => t m -> m fold (f TmuxResponse -> Maybe TmuxResponse forall x. f x -> Maybe x ins f TmuxResponse out)) cmd x cmd) interpretCodecTmuxCommand :: InterpreterFor (Codec TmuxCommand TmuxRequest TmuxResponse !! CodecError) r interpretCodecTmuxCommand :: forall (r :: [Effect]) a. Sem ((Codec TmuxCommand TmuxRequest TmuxResponse !! CodecError) : r) a -> Sem r a interpretCodecTmuxCommand = (forall x. TmuxCommand x -> TmuxRequest) -> (forall x. TmuxResponse -> TmuxCommand x -> Either DecodeError x) -> InterpreterFor (Codec TmuxCommand TmuxRequest TmuxResponse !! CodecError) r forall (cmd :: * -> *) (r :: [Effect]). (forall x. cmd x -> TmuxRequest) -> (forall x. TmuxResponse -> cmd x -> Either DecodeError x) -> InterpreterFor (Codec cmd TmuxRequest TmuxResponse !! CodecError) r interpretCodecNative TmuxCommand x -> TmuxRequest forall x. TmuxCommand x -> TmuxRequest TmuxCommand.encode TmuxResponse -> TmuxCommand x -> Either DecodeError x forall x. TmuxResponse -> TmuxCommand x -> Either DecodeError x TmuxCommand.decode {-# inline interpretCodecTmuxCommand #-} interpretCodecPanes :: TmuxCodec p => InterpreterFor (Codec (Panes p) TmuxRequest TmuxResponse !! CodecError) r interpretCodecPanes :: forall p (r :: [Effect]). TmuxCodec p => InterpreterFor (Codec (Panes p) TmuxRequest TmuxResponse !! CodecError) r interpretCodecPanes = (forall x. Panes p x -> TmuxRequest) -> (forall x. TmuxResponse -> Panes p x -> Either DecodeError x) -> InterpreterFor (Codec (Panes p) TmuxRequest TmuxResponse !! CodecError) r forall (cmd :: * -> *) (r :: [Effect]). (forall x. cmd x -> TmuxRequest) -> (forall x. TmuxResponse -> cmd x -> Either DecodeError x) -> InterpreterFor (Codec cmd TmuxRequest TmuxResponse !! CodecError) r interpretCodecNative Panes p x -> TmuxRequest forall x. Panes p x -> TmuxRequest forall p a. TmuxCodec p => Panes p a -> TmuxRequest Panes.encode TmuxResponse -> Panes p x -> Either DecodeError x forall x. TmuxResponse -> Panes p x -> Either DecodeError x forall p a. TmuxCodec p => TmuxResponse -> Panes p a -> Either DecodeError a Panes.decode {-# inline interpretCodecPanes #-} interpretCodecPure :: (∀ a . command a -> Sem r (Either Text a)) -> InterpreterFor (Codec command () decode !! Text) r interpretCodecPure :: forall (command :: * -> *) (r :: [Effect]) decode. (forall a. command a -> Sem r (Either Text a)) -> InterpreterFor (Codec command () decode !! Text) r interpretCodecPure forall a. command a -> Sem r (Either Text a) run = (forall x (r0 :: [Effect]). Codec command () decode (Sem r0) x -> Tactical (Resumable Text (Codec command () decode)) (Sem r0) (Stop Text : r) x) -> InterpreterFor (Resumable Text (Codec command () decode)) r forall err (eff :: Effect) (r :: [Effect]). (forall x (r0 :: [Effect]). eff (Sem r0) x -> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x) -> InterpreterFor (Resumable err eff) r interpretResumableH \case Codec.Encode command a1 _ -> x -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (f x) forall (f :: * -> *) a (e :: Effect) (m :: * -> *) (r :: [Effect]). Functor f => a -> Sem (WithTactics e f m r) (f a) pureT () Codec.WithCodec command x cmd () -> Sem r0 decode _ -> (Text -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (f x)) -> (x -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (f x)) -> Either Text x -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (f x) forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either Text -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (f x) forall e (r :: [Effect]) a. Member (Stop e) r => e -> Sem r a stop x -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (f x) forall (f :: * -> *) a (e :: Effect) (m :: * -> *) (r :: [Effect]). Functor f => a -> Sem (WithTactics e f m r) (f a) pureT (Either Text x -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (f x)) -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (Either Text x) -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (f x) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Sem (Stop Text : r) (Either Text x) -> Sem (WithTactics (Resumable Text (Codec command () decode)) f (Sem r0) (Stop Text : r)) (Either Text x) forall (e :: Effect) (r :: [Effect]) a. Sem r a -> Sem (e : r) a raise (Sem r (Either Text x) -> Sem (Stop Text : r) (Either Text x) forall (e :: Effect) (r :: [Effect]) a. Sem r a -> Sem (e : r) a raise (command x -> Sem r (Either Text x) forall a. command a -> Sem r (Either Text a) run command x cmd))