The safe-globals package
This library provides a way to declare
at the top level of a module.
Declarations are safe. User code does not invoke
unsafePerformIOor compiler pragmas.
Variables are ordinary module-level bindings. Their scope can be controlled through the usual module import/export mechanism. Unrelated code cannot interfere with private variables by guessing some global identifier.
References are statically typed, and polymorphic references are statically forbidden.
The implementation is simple, and closely follows existing common practice.
This library does not prevent the software design problems caused by global state. Rather, it provides some implementation safety for those circumstances where global state really is necessary.
Fundamentally this library just provides Template Haskell macros for the
unsafePerformIO trick, so it is subject to the same caveats. In
particular, linking a module and then loading the same module dynamically
through the GHC API may produce two copies of the same top-level variable.
See the documentation of
unsafePerformIO for additional compiler-specific
This library may not work properly on GHC before 7.4, due to a GHC bug: http://hackage.haskell.org/trac/ghc/ticket/5558
[Skip to Readme]
|Dependencies||base (>=3 && <5), stm (>=2.1), template-haskell (>=2.4) [details]|
|Author||Keegan McAllister <firstname.lastname@example.org>|
|Maintainer||Keegan McAllister <email@example.com>|
|Source repository||head: git clone git://github.com/kmcallister/safe-globals|
|Uploaded||Wed Dec 21 16:50:23 UTC 2011 by KeeganMcAllister|
|Downloads||1055 total (20 in the last 30 days)|
|Status||Docs uploaded by user
Build status unknown [no reports yet]
Hackage Matrix CI
For package maintainers and hackage trustees