Copyright | Justin Ethier |
---|---|
License | MIT (see LICENSE in the distribution) |
Maintainer | github.com/justinethier |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell98 |
This module contains code for working with Scheme variables, and the environments that contain them.
- printEnv :: Env -> IO String
- copyEnv :: Env -> IO Env
- extendEnv :: Env -> [((String, String), LispVal)] -> 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
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.
:: 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
varNamespace :: [Char] Source
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
Bind a variable in the given namespace
:: Env | Environment |
-> String | Variable |
-> LispVal | Value |
-> IOThrowsError LispVal | Value |
Set a variable in the default namespace
Set a variable in a given namespace
updateObject :: Env -> String -> LispVal -> IOThrowsError LispVal Source
A wrapper for updateNamespaceObject that uses the variable namespace.
updateNamespacedObject :: Env -> String -> String -> LispVal -> IOThrowsError LispVal Source
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 LispVal Source
Return a value with a pointer dereferenced, if necessary
recDerefPtrs :: LispVal -> IOThrowsError LispVal Source
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.