unlike some modal logic aproaches to mobile languages, the only code that can be executed is the code you compiled, and not code passed from world to world

State can be serialized with references.

Usage

To install, run cabal install

Hosts are declared at the declaration level

$(makeHost "WorldName" "host_location" #portNumber)

Installing a remote service:

makeServices registers a list of service names which all have the same host

autoService automatically figures out which services in the given file run on the specified host and registers them. A good usage pattern is to provide all modules with services with a registration hook that can be appended to the main server.

module First where
services = $(autoService 'HostName)
module Second where
services = $(autoService 'HostName)
module Main where
import qualified First as F
import qualified Second as S
main = runServer $ F.services >> S.services