Namespaced, global, and top-level mutable variables without unsafePerformIO.
Data.Global
provides a global namespace of IORef
s, MVar
s and TVar
s. This namespace may be accessed in pure code. Yet reading and writing to those IORef
s, MVar
s and TVar
s happens still in their respective monads.
Data.Global
is designed to meet the following use cases:
Simplify the declaration of top-level mutable variables, by avoiding any pragmas as well as
unsafePerformIO
.Avoid having to pass references explicitly throughout the program in order to let distant parts communicate.
Enable a communication by convention scheme, where e.g. different libraries may communicate without code dependencies.
Simplify the "configuration problem" - at least for code in the IO monad.
Note, that this library does not encourage sloppy software design by re-introducing all bad effects of global variables. Nevertheless, sometimes global variables are a suitable solution to a problem. In that case Data.Global
simplifies and extends their handling significantly.
Examples are in the documentation of Data.Global
.
Version History:
0.1.1: made compatible with stm-2.3
0.1.0: added declareEmptyMVar and widened the stm dependency
0: First public release