Module Global

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

Summary of exported operations:

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.

Exported datatypes:


Global

The abstract type of a global entity.

Constructors:


GlobalSpec

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)

Exported operations:

global :: a -> GlobalSpec -> Global a   

global is only used for the declaration of a global value and should not be used elsewhere. In the future, it might become a keyword.

Further infos:
  • solution complete, i.e., able to compute all solutions

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. If readGlobal fails (e.g., due to a corrupted persistent storage), the global is re-initialized with the default value given as the second argument.

writeGlobal :: Global a -> a -> IO ()   

Updates the value of a global. The value is evaluated to a ground constructor term before it is updated.