ribosome-host-0.9.9.9: lib/Ribosome/Host/Remote.hs
module Ribosome.Host.Remote where
import Ribosome.Host.Data.HostConfig (HostConfig)
import Ribosome.Host.Data.Report (Report)
import Ribosome.Host.Data.RpcHandler (RpcHandler)
import Ribosome.Host.Effect.Handlers (Handlers)
import Ribosome.Host.IOStack (BasicStack, IOStack, runBasicStack)
import Ribosome.Host.Interpreter.Handlers (interpretHandlers)
import Ribosome.Host.Interpreter.Host (runHost)
import Ribosome.Host.Interpreter.Process.Stdio (interpretProcessCerealStdio)
import Ribosome.Host.Interpreter.UserError (interpretUserErrorInfo)
import Ribosome.Host.Run (RpcDeps, RpcStack, interpretRpcStack)
type HostRemoteStack =
RpcStack ++ RpcDeps
type HostRemoteIOStack =
HostRemoteStack ++ BasicStack
interpretRpcDeps ::
Members IOStack r =>
InterpretersFor RpcDeps r
interpretRpcDeps =
interpretUserErrorInfo .
interpretProcessCerealStdio
interpretHostRemote ::
Members BasicStack r =>
InterpretersFor HostRemoteStack r
interpretHostRemote =
interpretRpcDeps .
interpretRpcStack
runHostRemote ::
Members BasicStack r =>
InterpreterFor (Handlers !! Report) (HostRemoteStack ++ r) ->
Sem r ()
runHostRemote handlers =
interpretHostRemote (handlers runHost)
runHostRemoteIO ::
HostConfig ->
[RpcHandler HostRemoteIOStack] ->
IO ()
runHostRemoteIO conf handlers =
runBasicStack conf $
runHostRemote (interpretHandlers handlers)