Library enabling unique top-level declarations.
The "global" library enables the declaration of unique top-level declarations, including references to mutable state accessible via IO.
Conceptually, this library defines primitive means of unique declarations, whose internal implementation is hidden from users, and uses Template Haskell to provide a public interface. Thus, it is not necessarily portable across various implementations. It is currently designed to be compatible with GHC. Users do not need to be aware of the internal, low-level implementation; if a more portable, stable means of providing the same functionality becomes available, the library can be updated without changing the provided public interface.
While this library provides the basis for an alternative approach to managing state, users should consider using instead the transformers
library's StateT transformer, possibly accompanied with fclabels
to manage hierarchical state (libraries that provide a higher-level means of managing monad stacks based on transformers include mtl
, monads-tf
, and monad-operations
). This library might be more appropriately used for other purposes, such as to provide a means to directly translate C to Haskell with a result whose style more closely resembles that of the original code. Users should also consider using the language feature ImplicitParams
.
Examples of small programs that use this library are provided in the repository in which it resides.
The changelog does not cover every commit. It outlines highlights and significant changes.
Quality note: In late 2014, I found this repository on my hard drive from 2011. I'm surprised and don't remember why I never uploaded this to Hackage. As a relatively inexperienced 16-year-old with at most 2 years of functional programming experience (with much more procedural programming experience), I wrote Haskell code in a way that I now expect to be capable of rewriting with something of much better quality. But I was pleasantly surprised with the quality of the documentation, taking into account my memory of my past self. Quality-wise, it seems better than a few other projects I wrote at around the same time, e.g. monad-state
, although that was 6-12 months earlier.
I've since converted the repository to git and uploaded it to github. I've patched it up so that it builds, but nothing more yet (sans a few minor cleanups here and there, largely just in the cabal file, that I'm applying to each of my old projects I found).
Contributions, feedback, and constructive criticism are welcome.