Laborantin is a framework and DSL to run and manage results from scientific
experiments. Good targets for Laborantin are experiments that you can
run offline such as benchmark and batch analytics.
Writing experiments with Laborantin has at least two advantages over
rolling your own scripts. First, Laborantin standardizes the workflow of your
experimentations. There is one way to describe what a project can do, what
experiments were already run, how to delete files corresponding to a specific
experiment, etc. Second, Laborantin builds on years of experience running
experiments. Using Laborantin should alleviate common pain points such as
querying for experiments, managing dependencies between results, etc.
Laborantin's DSL lets you express experiment parameters,
setup, teardown, and recovery hooks in a systematic way.
In addition, the DSL lets you express dependencies on your
experiments so that you can run prior experiments or data analyses.
Laborantin comes with a default backend that stores
experiment results in a filesystem-hierarchy. Laborantin
also comes with a default command-line that let you
specify which experiments to run, analyze, or delete.
ping :: ScenarioDescription EnvIO
ping = scenario "ping" $ do
describe "ping to a remote server"
parameter "destination" $ do
describe "a destination server (host or ip)"
values [str "example.com", str "probecraft.net"]
parameter "packet-size" $ do
describe "packet size in bytes"
values [num 50, num 1500]
run $ do
(StringParam srv) <- param "destination"
(StringParam ps) <- param "packet-size"
liftIO (executePingCommand srv ps) >>= writeResult "raw-result"
where executePingCommand :: Text -> Rational -> IO (Text)
executePingCommand host packetSize = ...
main :: IO ()
main = defaultMain [ping]