Portability | portable |
---|---|
Stability | experimental |
Maintainer | github.com/justinethier |
Safe Haskell | Safe-Inferred |
This module contains code for working with Scheme variables, and the environments that contain them.
- printEnv :: Env -> IO String
- exportsFromEnv :: Env -> IO [LispVal]
- copyEnv :: Env -> IO Env
- extendEnv :: Env -> [((String, String), LispVal)] -> IO Env
- importEnv :: Env -> Env -> IO Env
- topmostEnv :: Env -> IO Env
- nullEnvWithParent :: Env -> IO Env
- findNamespacedEnv :: Env -> String -> String -> IO (Maybe Env)
- macroNamespace :: [Char]
- varNamespace :: [Char]
- getVar :: Env -> String -> IOThrowsError LispVal
- getNamespacedVar :: Env -> String -> String -> IOThrowsError LispVal
- defineVar :: Env -> String -> LispVal -> IOThrowsError LispVal
- defineNamespacedVar :: Env -> String -> String -> LispVal -> IOThrowsError LispVal
- setVar :: Env -> String -> LispVal -> IOThrowsError LispVal
- setNamespacedVar :: Env -> String -> String -> LispVal -> IOThrowsError LispVal
- updateObject :: Env -> String -> LispVal -> IOThrowsError LispVal
- updateNamespacedObject :: Env -> String -> String -> LispVal -> IOThrowsError LispVal
- isBound :: Env -> String -> IO Bool
- isRecBound :: Env -> String -> IO Bool
- isNamespacedBound :: Env -> String -> String -> IO Bool
- isNamespacedRecBound :: Env -> String -> String -> IO Bool
- derefPtr :: LispVal -> IOThrowsError LispVal
- recDerefPtrs :: LispVal -> IOThrowsError LispVal
Environments
Show the contents of an environment
exportsFromEnv :: Env -> IO [LispVal]Source
Return a list of symbols exported from an environment
Create a deep copy of an environment
:: Env | Environment |
-> [((String, String), LispVal)] | Extensions to the environment |
-> IO Env | Extended environment |
Extend given environment by binding a series of values to a new environment.
Perform a deep copy of an environment's contents into another environment.
The destination environment is modified!
topmostEnv :: Env -> IO EnvSource
Find the top-most environment
nullEnvWithParent :: Env -> IO EnvSource
:: Env | Environment to begin the search; parent env's will be searched as well. |
-> String | Namespace |
-> String | Variable |
-> IO (Maybe Env) | Environment, or Nothing if there was no match. |
Recursively search environments to find one that contains the given variable.
macroNamespace :: [Char]Source
Internal namespace for macros
varNamespace :: [Char]Source
Internal namespace for variables
Getters
:: Env | Environment |
-> String | Variable |
-> IOThrowsError LispVal | Contents of the variable |
Retrieve the value of a variable defined in the default namespace
:: Env | Environment |
-> String | Namespace |
-> String | Variable |
-> IOThrowsError LispVal | Contents of the variable |
Retrieve the value of a variable defined in a given namespace
Setters
:: Env | Environment |
-> String | Variable |
-> LispVal | Value |
-> IOThrowsError LispVal | Value |
Bind a variable in the default namespace
:: Env | Environment |
-> String | Namespace |
-> String | Variable |
-> LispVal | Value |
-> IOThrowsError LispVal | Value |
Bind a variable in the given namespace
:: Env | Environment |
-> String | Variable |
-> LispVal | Value |
-> IOThrowsError LispVal | Value |
Set a variable in the default namespace
:: Env | Environment |
-> String | Namespace |
-> String | Variable |
-> LispVal | Value |
-> IOThrowsError LispVal | Value |
Set a variable in a given namespace
updateObject :: Env -> String -> LispVal -> IOThrowsError LispValSource
A wrapper for updateNamespaceObject that uses the variable namespace.
updateNamespacedObject :: Env -> String -> String -> LispVal -> IOThrowsError LispValSource
This function updates the object that var refers to. If var is a pointer, that means this function will update that pointer (or the last pointer in the chain) to point to the given value object. If var is not a pointer, the result is the same as a setVar (but without updating any pointer references, see below).
Note this function only updates the object, it does not update any associated pointers. So it should probably only be used internally by husk, unless you really know what you are doing!
Predicates
Determine if a variable is bound in the default namespace
Determine if a variable is bound in the default namespace, in this environment or one of its parents.
Determine if a variable is bound in a given namespace
Determine if a variable is bound in a given namespace or a parent of the given environment.
Pointers
derefPtr :: LispVal -> IOThrowsError LispValSource
Return a value with a pointer dereferenced, if necessary
recDerefPtrs :: LispVal -> IOThrowsError LispValSource
Recursively process the given data structure, dereferencing any pointers found along the way.
This could potentially be expensive on large data structures since it must walk the entire object.