Library for handling global entities. A global entity has a name declared in the program. Its value can be accessed and modified by IO actions. Furthermore, global entities can be declared as persistent so that their values are stored across different program executions.
Currently, it is still experimental so that its interface might be slightly changed in the future.
A global entity g
with an initial value v
of type t
must be declared by:
g :: Global t g = global v spec
Here, the type t
must not contain type variables and
spec
specifies the storage mechanism for the
global entity (see type GlobalSpec
).
Author: Michael Hanus
Version: February 2017
global
:: a -> GlobalSpec -> Global a
global
is only used for the declaration of a global value
and should not be used elsewhere.
|
readGlobal
:: Global a -> IO a
Reads the current value of a global. |
safeReadGlobal
:: Global a -> a -> IO a
Safely reads the current value of a global. |
writeGlobal
:: Global a -> a -> IO ()
Updates the value of a global. |
The abstract type of a global entity.
Constructors:
The storage mechanism for the global entity.
Constructors:
Temporary
:: GlobalSpec
: the global value exists only during a single execution
of a program
Persistent
:: String -> GlobalSpec
: the global value is stored persisently in file f
(which is created and initialized if it does not exists)
|
Reads the current value of a global. |
Safely reads the current value of a global.
If |
Updates the value of a global. The value is evaluated to a ground constructor term before it is updated. |