Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Haskell code for interacting with a Futhark server program. This module presents a low-level interface. See <https://futhark.readthedocs.io/en/latest/server-protocol.html the documentation of the server protocol> for the meaning of the commands. See also Futhark.Server.Values for higher-level functions for loading data into a server.
Error messages produced by the server will be returned as a
CmdFailure
. However, certain errors (such as if the server
process terminates unexpectedly, or temporary files cannot be
created) will result in an IO exception.
Synopsis
- data Server
- data ServerCfg = ServerCfg {}
- newServerCfg :: FilePath -> [String] -> ServerCfg
- withServer :: ServerCfg -> (Server -> IO a) -> IO a
- data CmdFailure = CmdFailure {
- failureLog :: [Text]
- failureMsg :: [Text]
- type VarName = Text
- type TypeName = Text
- type EntryName = Text
- cmdRestore :: Server -> FilePath -> [(VarName, TypeName)] -> IO (Maybe CmdFailure)
- cmdStore :: Server -> FilePath -> [VarName] -> IO (Maybe CmdFailure)
- cmdCall :: Server -> EntryName -> [VarName] -> [VarName] -> IO (Either CmdFailure [Text])
- cmdFree :: Server -> [VarName] -> IO (Maybe CmdFailure)
- cmdRename :: Server -> VarName -> VarName -> IO (Maybe CmdFailure)
- cmdInputs :: Server -> EntryName -> IO (Either CmdFailure [TypeName])
- cmdOutputs :: Server -> EntryName -> IO (Either CmdFailure [TypeName])
- cmdClear :: Server -> IO (Maybe CmdFailure)
- cmdReport :: Server -> IO (Either CmdFailure [Text])
- cmdMaybe :: (MonadError Text m, MonadIO m) => IO (Maybe CmdFailure) -> m ()
- cmdEither :: (MonadError Text m, MonadIO m) => IO (Either CmdFailure a) -> m a
- startServer :: ServerCfg -> IO Server
- stopServer :: Server -> IO ()
- sendCommand :: Server -> [Text] -> IO (Either CmdFailure [Text])
Server creation
Configuration of the server. Use newServerCfg
to conveniently
create a sensible default configuration.
newServerCfg :: FilePath -> [String] -> ServerCfg Source #
Create a server config with the given cfgProg
and cfgProgOpts
.
withServer :: ServerCfg -> (Server -> IO a) -> IO a Source #
Start a server, execute an action, then shut down the server.
The Server
may not be returned from the action.
Commands
data CmdFailure Source #
The command failed, and this is why. The first Text
is any
output before the failure indincator, and the second Text is the
output after the indicator.
CmdFailure | |
|
Instances
Eq CmdFailure Source # | |
Defined in Futhark.Server (==) :: CmdFailure -> CmdFailure -> Bool # (/=) :: CmdFailure -> CmdFailure -> Bool # | |
Ord CmdFailure Source # | |
Defined in Futhark.Server compare :: CmdFailure -> CmdFailure -> Ordering # (<) :: CmdFailure -> CmdFailure -> Bool # (<=) :: CmdFailure -> CmdFailure -> Bool # (>) :: CmdFailure -> CmdFailure -> Bool # (>=) :: CmdFailure -> CmdFailure -> Bool # max :: CmdFailure -> CmdFailure -> CmdFailure # min :: CmdFailure -> CmdFailure -> CmdFailure # | |
Show CmdFailure Source # | |
Defined in Futhark.Server showsPrec :: Int -> CmdFailure -> ShowS # show :: CmdFailure -> String # showList :: [CmdFailure] -> ShowS # |
cmdRestore :: Server -> FilePath -> [(VarName, TypeName)] -> IO (Maybe CmdFailure) Source #
restore filename var0 type0 var1 type1...
.
cmdStore :: Server -> FilePath -> [VarName] -> IO (Maybe CmdFailure) Source #
store filename vars...
.
cmdCall :: Server -> EntryName -> [VarName] -> [VarName] -> IO (Either CmdFailure [Text]) Source #
call entrypoint outs... ins...
.
cmdOutputs :: Server -> EntryName -> IO (Either CmdFailure [TypeName]) Source #
outputs entryname
Utility
cmdMaybe :: (MonadError Text m, MonadIO m) => IO (Maybe CmdFailure) -> m () Source #
Turn a Maybe
-producing command into a monadic action.
cmdEither :: (MonadError Text m, MonadIO m) => IO (Either CmdFailure a) -> m a Source #
Turn an Either
-producing command into a monadic action.
Raw
startServer :: ServerCfg -> IO Server Source #
Start up a server. Make sure that stopServer
is eventually
called on the server. If this does not happen, then temporary
files may be left on the file system. You almost certainly wish to
use bracket
or similar to avoid this.
stopServer :: Server -> IO () Source #
Shut down a server. It may not be used again.
sendCommand :: Server -> [Text] -> IO (Either CmdFailure [Text]) Source #
Send an arbitrary command to the server. This is only useful when the server protocol has been extended without this module having been similarly extended. Be careful not to send invalid commands.