Haskell's IO simulator which closely follows core packages (base, async, stm).
See the codeio-simIOSim is a simulator monad that supports:
forkIO as well as async styleTVar, TMVars, etc.TVar's, etc.io-classes:io-classes provides an interface, which allows writing code that
can be run in both real IO and IOSim. It is a drop-in replacement for
IO, and supports interfaces commonly known from base, exceptions, stm,
async, or time packages.
One of the principles of io-classes:io-classes was to stay as close to IO
as possible, thus most of the IO instances are directly referring to base
or async API. However, we made some distinctions, which are reported below.
io-classes:io-classes supports a novel hierarchy for error-handling monads
as well as more familiar exception style. The new hierarchy provides
bracket and finally functions in the MonadThrow class, while catch
style operators are provided by a super-class MonadCatch. Both bracket and
finally are the most common functions used to write code with robust
exception handling, exposing them through the more basic MonadThrow class
informs the reader / reviewer that no tricky error handling is done in that
section of the code base.
IOSim exposes a detailed trace, which can be enhanced by labeling threads, or
mutable variables, tracing Dynamic values (which can be recovered from the
trace), or simple String based tracing. Although it's agnostic concerning
the logging framework, it worked for us particularly well using
contra-tracer. It has been used to develop, test, and debug
a complex, highly concurrent, distributed system
(ouroboros-network), in particular
io-sim: provides two simulator interpreters: IOSim and
IOSimPOR - an enhanced IOSim version with schedule discovery
capabilities.io-classes:io-classes: class bases interface, which allows to to abstract over the
monadio-classes:strict-stm: strict STM operationsio-classes:si-timers: non-standard timers APINew issues should be reported in this repository.
(top 30 of 35)
Haskell
99.9%
Haskell's IO simulator which closely follows core packages (base, async, stm).
See the codeio-simIOSim is a simulator monad that supports:
forkIO as well as async styleTVar, TMVars, etc.TVar's, etc.io-classes:io-classes provides an interface, which allows writing code that
can be run in both real IO and IOSim. It is a drop-in replacement for
IO, and supports interfaces commonly known from base, exceptions, stm,
async, or time packages.
One of the principles of io-classes:io-classes was to stay as close to IO
as possible, thus most of the IO instances are directly referring to base
or async API. However, we made some distinctions, which are reported below.
io-classes:io-classes supports a novel hierarchy for error-handling monads
as well as more familiar exception style. The new hierarchy provides
bracket and finally functions in the MonadThrow class, while catch
style operators are provided by a super-class MonadCatch. Both bracket and
finally are the most common functions used to write code with robust
exception handling, exposing them through the more basic MonadThrow class
informs the reader / reviewer that no tricky error handling is done in that
section of the code base.
IOSim exposes a detailed trace, which can be enhanced by labeling threads, or
mutable variables, tracing Dynamic values (which can be recovered from the
trace), or simple String based tracing. Although it's agnostic concerning
the logging framework, it worked for us particularly well using
contra-tracer. It has been used to develop, test, and debug
a complex, highly concurrent, distributed system
(ouroboros-network), in particular
io-sim: provides two simulator interpreters: IOSim and
IOSimPOR - an enhanced IOSim version with schedule discovery
capabilities.io-classes:io-classes: class bases interface, which allows to to abstract over the
monadio-classes:strict-stm: strict STM operationsio-classes:si-timers: non-standard timers APINew issues should be reported in this repository.
(top 30 of 35)
Haskell
99.9%