Module Data.Global

A library to support global entities in Curry programs. A global entity has a name declared as a top-level entity. Its value can be accessed and modified by IO actions. Global entities can be declared as persistent so that their values are stored across different program executions or temporary so that they will be stored only in memory.

Currently, it is still experimental so that its interface might be slightly changed in the future.

A temporary global entity gt is a top-level constant of type GlobalT t. If v is an initial value v of type t, where the type t does not contain type variables or type class contraints, the temporary global entity should be declared in a module Mod by:

gt :: GlobalT t
gt = globalT "Mod.gt" v

The first argument is the qualified name of this program entity and used as a unique name for this global value.

Similarly, a persistent global entity gp with an initial value v of type t could be declared by:

gt :: GlobalP t
gt = globalPersistent f v

where the type t must not contain type variables and support Read and Show instances. f is the file name where the global value is persistently stored (the file is created and initialized with v if it does not exist).

Author: Michael Hanus

Version: December 2023

Summary of exported operations:

globalT :: String -> a -> GlobalT a  Deterministic 
globalT is used only to declare a temporary global value as a top-level entity.
readGlobalT :: GlobalT a -> IO a  Deterministic 
Reads the current value of a temporary global entity.
writeGlobalT :: GlobalT a -> a -> IO ()  Deterministic 
Updates the value of a temporary global entity.
globalP :: (Read a, Show a) => String -> a -> GlobalP a  Deterministic 
globalP is used only to declare a persistent global value as a top-level entity.
globalPersistent :: (Read a, Show a) => String -> a -> GlobalP a  Deterministic 
globalPersistent is used only to declare a persistent global value as a top-level entity.
readGlobalP :: Read a => GlobalP a -> IO a  Deterministic 
Reads the current value of a persistent global entity.
safeReadGlobalP :: (Read a, Show a) => GlobalP a -> a -> IO a  Deterministic 
Safely reads the current value of a global.
writeGlobalP :: Show a => GlobalP a -> a -> IO ()  Deterministic 
Updates the value of a persistent global entity.

Exported datatypes:


GlobalT

Constructors:


GlobalP

The abstract type of a persistent global entity.

Constructors:


Exported operations:

globalT :: String -> a -> GlobalT a  Deterministic 

globalT is used only to declare a temporary global value as a top-level entity. It should not be used elsewhere. The first argument is the unique name of the temporary global entity. It should be the qualified name of the corresponding program entity. The second argument is the initial value which will be evaluated to a ground normal form when the global entity is used for the first time.

readGlobalT :: GlobalT a -> IO a  Deterministic 

Reads the current value of a temporary global entity.

writeGlobalT :: GlobalT a -> a -> IO ()  Deterministic 

Updates the value of a temporary global entity. The new value is evaluated to a ground normal form before updating the entity.

globalP :: (Read a, Show a) => String -> a -> GlobalP a  Deterministic 

globalP is used only to declare a persistent global value as a top-level entity. It should not be used elsewhere. The first argument is the file name where the global value is persistently stored. The file is created and initialized with the second argument if it does not exist.

globalPersistent :: (Read a, Show a) => String -> a -> GlobalP a  Deterministic 

globalPersistent is used only to declare a persistent global value as a top-level entity. It should not be used elsewhere. The first argument is the file name where the global value is persistently stored. The file is created and initialized with the second argument if it does not exist.

readGlobalP :: Read a => GlobalP a -> IO a  Deterministic 

Reads the current value of a persistent global entity.

safeReadGlobalP :: (Read a, Show a) => GlobalP a -> a -> IO a  Deterministic 

Safely reads the current value of a global. If readGlobalP fails (e.g., due to a corrupted persistent storage), the global is re-initialized with the default value given as the second argument.

writeGlobalP :: Show a => GlobalP a -> a -> IO ()  Deterministic 

Updates the value of a persistent global entity.