module Chiasma.Tmux where import Polysemy.Internal (hoistSem) import Polysemy.Internal.Sing (KnownList (singList)) import Polysemy.Internal.Union (hoist, weakenMid) import Chiasma.Data.Panes (Panes, TmuxPanes) import Chiasma.Effect.Codec (Codec) import Chiasma.Effect.TmuxApi (TmuxApi) import Chiasma.Effect.TmuxClient (ScopedTmux, TmuxClient) import Chiasma.Interpreter.TmuxApi ( InterpretApis (interpretApis), RestopApis (restopApis), TmuxApis, interpretTmuxApi, type (<$>), ) withTmuxApis' :: ∀ commands err i o r a . InterpretApis commands err i o r => Member (ScopedTmux i o) r => Sem (TmuxApis commands err ++ TmuxClient i o : r) a -> Sem r a withTmuxApis' :: forall (commands :: [* -> *]) err i o (r :: [(* -> *) -> * -> *]) a. (InterpretApis commands err i o r, Member (ScopedTmux i o) r) => Sem (TmuxApis commands err ++ (TmuxClient i o : r)) a -> Sem r a withTmuxApis' = Sem (TmuxClient i o : r) a -> Sem r a forall (effect :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]). Member (Scoped_ effect) r => InterpreterFor effect r scoped_ (Sem (TmuxClient i o : r) a -> Sem r a) -> (Sem (Append (Eval (FMap (TmuxApiEffect err) commands)) (TmuxClient i o : r)) a -> Sem (TmuxClient i o : r) a) -> Sem (Append (Eval (FMap (TmuxApiEffect err) commands)) (TmuxClient i o : r)) a -> Sem r a forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (commands :: [* -> *]) err i o (r :: [(* -> *) -> * -> *]). InterpretApis commands err i o r => InterpretersFor (TmuxApis commands err) (TmuxClient i o : r) interpretApis @commands @err insertAfter :: ∀ left e r a . KnownList left => Sem (left ++ r) a -> Sem (left ++ e : r) a insertAfter :: forall (left :: [(* -> *) -> * -> *]) (e :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]) a. KnownList left => Sem (left ++ r) a -> Sem (left ++ (e : r)) a insertAfter = (forall x. Union (Append left r) (Sem (Append left r)) x -> Union (Append left (e : r)) (Sem (Append left (e : r))) x) -> Sem (Append left r) a -> Sem (Append left (e : r)) a forall (r :: [(* -> *) -> * -> *]) (r' :: [(* -> *) -> * -> *]) a. (forall x. Union r (Sem r) x -> Union r' (Sem r') x) -> Sem r a -> Sem r' a hoistSem ((forall x. Union (Append left r) (Sem (Append left r)) x -> Union (Append left (e : r)) (Sem (Append left (e : r))) x) -> Sem (Append left r) a -> Sem (Append left (e : r)) a) -> (forall x. Union (Append left r) (Sem (Append left r)) x -> Union (Append left (e : r)) (Sem (Append left (e : r))) x) -> Sem (Append left r) a -> Sem (Append left (e : r)) a forall a b. (a -> b) -> a -> b $ (forall x. Sem (Append left r) x -> Sem (Append left (e : r)) x) -> Union (Append left (e : r)) (Sem (Append left r)) x -> Union (Append left (e : r)) (Sem (Append left (e : r))) x forall (m :: * -> *) (n :: * -> *) (r :: [(* -> *) -> * -> *]) a. (forall x. m x -> n x) -> Union r m a -> Union r n a hoist (forall (left :: [(* -> *) -> * -> *]) (e :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]) a. KnownList left => Sem (left ++ r) a -> Sem (left ++ (e : r)) a insertAfter @left @e @r) (Union (Append left (e : r)) (Sem (Append left r)) x -> Union (Append left (e : r)) (Sem (Append left (e : r))) x) -> (Union (Append left r) (Sem (Append left r)) x -> Union (Append left (e : r)) (Sem (Append left r)) x) -> Union (Append left r) (Sem (Append left r)) x -> Union (Append left (e : r)) (Sem (Append left (e : r))) x forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (right :: [(* -> *) -> * -> *]) (m :: * -> *) a (left :: [(* -> *) -> * -> *]) (mid :: [(* -> *) -> * -> *]). SList left -> SList mid -> Union (Append left right) m a -> Union (Append left (Append mid right)) m a weakenMid @r (forall (l :: [(* -> *) -> * -> *]). KnownList l => SList l forall {a} (l :: [a]). KnownList l => SList l singList @left) (forall (l :: [(* -> *) -> * -> *]). KnownList l => SList l forall {a} (l :: [a]). KnownList l => SList l singList @'[e]) withTmuxApis :: ∀ commands err i o r . KnownList (TmuxApis commands err) => InterpretApis commands err i o r => Member (ScopedTmux i o) r => InterpretersFor (TmuxApis commands err) r withTmuxApis :: forall (commands :: [* -> *]) err i o (r :: [(* -> *) -> * -> *]). (KnownList (TmuxApis commands err), InterpretApis commands err i o r, Member (ScopedTmux i o) r) => InterpretersFor (TmuxApis commands err) r withTmuxApis = Sem (TmuxClient i o : r) a -> Sem r a forall (effect :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]). Member (Scoped_ effect) r => InterpreterFor effect r scoped_ (Sem (TmuxClient i o : r) a -> Sem r a) -> (Sem (Append (Eval (FMap (TmuxApiEffect err) commands)) r) a -> Sem (TmuxClient i o : r) a) -> Sem (Append (Eval (FMap (TmuxApiEffect err) commands)) r) a -> Sem r a forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (commands :: [* -> *]) err i o (r :: [(* -> *) -> * -> *]). InterpretApis commands err i o r => InterpretersFor (TmuxApis commands err) (TmuxClient i o : r) interpretApis @commands @err (Sem (Append (Eval (FMap (TmuxApiEffect err) commands)) (TmuxClient i o : r)) a -> Sem (TmuxClient i o : r) a) -> (Sem (Append (Eval (FMap (TmuxApiEffect err) commands)) r) a -> Sem (Append (Eval (FMap (TmuxApiEffect err) commands)) (TmuxClient i o : r)) a) -> Sem (Append (Eval (FMap (TmuxApiEffect err) commands)) r) a -> Sem (TmuxClient i o : r) a forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (left :: [(* -> *) -> * -> *]) (e :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]) a. KnownList left => Sem (left ++ r) a -> Sem (left ++ (e : r)) a insertAfter @(TmuxApis commands err) @(TmuxClient i o) @r withTmuxApis_ :: ∀ commands err i o apis r . apis ~ TmuxApi <$> commands => KnownList apis => RestopApis commands err i o r => Member (ScopedTmux i o) r => InterpretersFor apis r withTmuxApis_ :: forall {k} (commands :: [* -> *]) (err :: k) i o (apis :: [(* -> *) -> * -> *]) (r :: [(* -> *) -> * -> *]). (apis ~ (TmuxApi <$> commands), KnownList apis, RestopApis commands err i o r, Member (ScopedTmux i o) r) => InterpretersFor apis r withTmuxApis_ = Sem (TmuxClient i o : r) a -> Sem r a forall (effect :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]). Member (Scoped_ effect) r => InterpreterFor effect r scoped_ (Sem (TmuxClient i o : r) a -> Sem r a) -> (Sem (Append apis r) a -> Sem (TmuxClient i o : r) a) -> Sem (Append apis r) a -> Sem r a forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (commands :: [* -> *]) (err :: k) i o (r :: [(* -> *) -> * -> *]). RestopApis commands err i o r => InterpretersFor (TmuxApi <$> commands) (TmuxClient i o : r) forall {k} (commands :: [* -> *]) (err :: k) i o (r :: [(* -> *) -> * -> *]). RestopApis commands err i o r => InterpretersFor (TmuxApi <$> commands) (TmuxClient i o : r) restopApis @commands @err (Sem (Append apis (TmuxClient i o : r)) a -> Sem (TmuxClient i o : r) a) -> (Sem (Append apis r) a -> Sem (Append apis (TmuxClient i o : r)) a) -> Sem (Append apis r) a -> Sem (TmuxClient i o : r) a forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (left :: [(* -> *) -> * -> *]) (e :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]) a. KnownList left => Sem (left ++ r) a -> Sem (left ++ (e : r)) a insertAfter @apis @(TmuxClient i o) @r withTmux :: ∀ command err i o r . Members [ScopedTmux i o, Codec command i o !! err] r => InterpreterFor (TmuxApi command !! err) r withTmux :: forall (command :: * -> *) err i o (r :: [(* -> *) -> * -> *]). Members '[ScopedTmux i o, Codec command i o !! err] r => InterpreterFor (TmuxApi command !! err) r withTmux = Sem (TmuxClient i o : r) a -> Sem r a forall (effect :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]). Member (Scoped_ effect) r => InterpreterFor effect r scoped_ (Sem (TmuxClient i o : r) a -> Sem r a) -> (Sem ((TmuxApi command !! err) : r) a -> Sem (TmuxClient i o : r) a) -> Sem ((TmuxApi command !! err) : r) a -> Sem r a forall b c a. (b -> c) -> (a -> b) -> a -> c . Sem ((TmuxApi command !! err) : TmuxClient i o : r) a -> Sem (TmuxClient i o : r) a forall (command :: * -> *) i o err (r :: [(* -> *) -> * -> *]). Members '[TmuxClient i o, Codec command i o !! err] r => InterpreterFor (TmuxApi command !! err) r interpretTmuxApi (Sem ((TmuxApi command !! err) : TmuxClient i o : r) a -> Sem (TmuxClient i o : r) a) -> (Sem ((TmuxApi command !! err) : r) a -> Sem ((TmuxApi command !! err) : TmuxClient i o : r) a) -> Sem ((TmuxApi command !! err) : r) a -> Sem (TmuxClient i o : r) a forall b c a. (b -> c) -> (a -> b) -> a -> c . Sem ((TmuxApi command !! err) : r) a -> Sem ((TmuxApi command !! err) : TmuxClient i o : r) a forall (e2 :: (* -> *) -> * -> *) (e1 :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]) a. Sem (e1 : r) a -> Sem (e1 : e2 : r) a raiseUnder withTmux_ :: ∀ command err i o r . Members [ScopedTmux i o, Codec command i o !! err, Stop err] r => InterpreterFor (TmuxApi command) r withTmux_ :: forall (command :: * -> *) err i o (r :: [(* -> *) -> * -> *]). Members '[ScopedTmux i o, Codec command i o !! err, Stop err] r => InterpreterFor (TmuxApi command) r withTmux_ = Sem (TmuxClient i o : r) a -> Sem r a forall (effect :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]). Member (Scoped_ effect) r => InterpreterFor effect r scoped_ (Sem (TmuxClient i o : r) a -> Sem r a) -> (Sem (TmuxApi command : r) a -> Sem (TmuxClient i o : r) a) -> Sem (TmuxApi command : r) a -> Sem r a forall b c a. (b -> c) -> (a -> b) -> a -> c . Sem (Resumable err (TmuxApi command) : TmuxClient i o : r) a -> Sem (TmuxClient i o : r) a forall (command :: * -> *) i o err (r :: [(* -> *) -> * -> *]). Members '[TmuxClient i o, Codec command i o !! err] r => InterpreterFor (TmuxApi command !! err) r interpretTmuxApi (Sem (Resumable err (TmuxApi command) : TmuxClient i o : r) a -> Sem (TmuxClient i o : r) a) -> (Sem (TmuxApi command : r) a -> Sem (Resumable err (TmuxApi command) : TmuxClient i o : r) a) -> Sem (TmuxApi command : r) a -> Sem (TmuxClient i o : r) a forall b c a. (b -> c) -> (a -> b) -> a -> c . Sem (Resumable err (TmuxApi command) : r) a -> Sem (Resumable err (TmuxApi command) : TmuxClient i o : r) a forall (e2 :: (* -> *) -> * -> *) (e1 :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]) a. Sem (e1 : r) a -> Sem (e1 : e2 : r) a raiseUnder (Sem (Resumable err (TmuxApi command) : r) a -> Sem (Resumable err (TmuxApi command) : TmuxClient i o : r) a) -> (Sem (TmuxApi command : r) a -> Sem (Resumable err (TmuxApi command) : r) a) -> Sem (TmuxApi command : r) a -> Sem (Resumable err (TmuxApi command) : TmuxClient i o : r) a forall b c a. (b -> c) -> (a -> b) -> a -> c . forall err (eff :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]). Members '[Resumable err eff, Stop err] r => InterpreterFor eff r restop @err @(TmuxApi command) (Sem (TmuxApi command : Resumable err (TmuxApi command) : r) a -> Sem (Resumable err (TmuxApi command) : r) a) -> (Sem (TmuxApi command : r) a -> Sem (TmuxApi command : Resumable err (TmuxApi command) : r) a) -> Sem (TmuxApi command : r) a -> Sem (Resumable err (TmuxApi command) : r) a forall b c a. (b -> c) -> (a -> b) -> a -> c . Sem (TmuxApi command : r) a -> Sem (TmuxApi command : Resumable err (TmuxApi command) : r) a forall (e2 :: (* -> *) -> * -> *) (e1 :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *]) a. Sem (e1 : r) a -> Sem (e1 : e2 : r) a raiseUnder withPanes :: ∀ p err i o r . Members [ScopedTmux i o, Codec (Panes p) i o !! err] r => InterpreterFor (TmuxPanes p !! err) r withPanes :: forall p err i o (r :: [(* -> *) -> * -> *]). Members '[ScopedTmux i o, Codec (Panes p) i o !! err] r => InterpreterFor (TmuxPanes p !! err) r withPanes = Sem ((TmuxApi (Panes p) !! err) : r) a -> Sem r a forall (command :: * -> *) err i o (r :: [(* -> *) -> * -> *]). Members '[ScopedTmux i o, Codec command i o !! err] r => InterpreterFor (TmuxApi command !! err) r withTmux withPanes_ :: ∀ p err i o r . Members [ScopedTmux i o, Codec (Panes p) i o !! err, Stop err] r => InterpreterFor (TmuxPanes p) r withPanes_ :: forall p err i o (r :: [(* -> *) -> * -> *]). Members '[ScopedTmux i o, Codec (Panes p) i o !! err, Stop err] r => InterpreterFor (TmuxPanes p) r withPanes_ = Sem (TmuxApi (Panes p) : r) a -> Sem r a forall (command :: * -> *) err i o (r :: [(* -> *) -> * -> *]). Members '[ScopedTmux i o, Codec command i o !! err, Stop err] r => InterpreterFor (TmuxApi command) r withTmux_