husk-scheme-3.20: R5RS Scheme interpreter, compiler, and library.
CopyrightJustin Ethier
LicenseMIT (see LICENSE in the distribution)
Maintainergithub.com/justinethier
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Language.Scheme.Variables

Description

This module contains code for working with Scheme variables, and the environments that contain them.

Synopsis

Environments

printEnv Source #

Arguments

:: Env

Environment

-> IO String

Contents of the env as a string

Show the contents of an environment

recPrintEnv :: Env -> IO String Source #

Recursively print an environment to string

recExportsFromEnv :: Env -> IO [LispVal] Source #

Recursively find all exports from the given environment

exportsFromEnv :: Env -> IO [LispVal] Source #

Return a list of symbols exported from an environment

copyEnv Source #

Arguments

:: Env

Source environment

-> IO Env

A copy of the source environment

Create a deep copy of an environment

extendEnv Source #

Arguments

:: Env

Environment

-> [((Char, String), LispVal)]

Extensions to the environment

-> IO Env

Extended environment

Extend given environment by binding a series of values to a new environment.

importEnv Source #

Arguments

:: Env

Destination environment

-> Env

Source environment

-> IO Env 

Perform a deep copy of an environment's contents into another environment.

The destination environment is modified!

topmostEnv :: Env -> IO Env Source #

Find the top-most environment

nullEnvWithParent :: Env -> IO Env Source #

Create a null environment with the given environment as its parent.

findNamespacedEnv Source #

Arguments

:: Env

Environment to begin the search; parent env's will be searched as well.

-> Char

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

getVar Source #

Arguments

:: Env

Environment

-> String

Variable

-> IOThrowsError LispVal

Contents of the variable

Retrieve the value of a variable defined in the default namespace

getVar' Source #

Arguments

:: Env

Environment

-> String

Variable

-> IOThrowsError (Maybe LispVal)

Contents of the variable

Retrieve the value of a variable defined in the default namespace, or Nothing if it is not defined

getNamespacedVar Source #

Arguments

:: Env

Environment

-> Char

Namespace

-> String

Variable

-> IOThrowsError LispVal

Contents of the variable

Retrieve the value of a variable defined in a given namespace

getNamespacedVar' Source #

Arguments

:: Env

Environment

-> Char

Namespace

-> String

Variable

-> IOThrowsError (Maybe LispVal)

Contents of the variable, if found

Retrieve the value of a variable defined in a given namespace, or Nothing if it is not defined

getNamespacedRef Source #

Arguments

:: Env

Environment

-> Char

Namespace

-> String

Variable

-> IOThrowsError (IORef LispVal) 

Retrieve an ioRef defined in a given namespace

Setters

defineVar Source #

Arguments

:: Env

Environment

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Bind a variable in the default namespace

defineNamespacedVar Source #

Arguments

:: Env

Environment

-> Char

Namespace

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Bind a variable in the given namespace

setVar Source #

Arguments

:: Env

Environment

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Set a variable in the default namespace

setNamespacedVar Source #

Arguments

:: Env

Environment

-> Char

Namespace

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Set a variable in a given namespace

updateObject :: Env -> String -> LispVal -> IOThrowsError LispVal Source #

A wrapper for updateNamespaceObject that uses the variable namespace.

updateNamespacedObject Source #

Arguments

:: Env

Environment

-> Char

Namespace

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

This function updates the object that the variable refers to. If it 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 the variable 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

isBound Source #

Arguments

:: Env

Environment

-> String

Variable

-> IO Bool

True if the variable is bound

Determine if a variable is bound in the default namespace

isRecBound Source #

Arguments

:: Env

Environment

-> String

Variable

-> IO Bool

True if the variable is bound

Determine if a variable is bound in the default namespace, in this environment or one of its parents.

isNamespacedRecBound Source #

Arguments

:: Env

Environment

-> Char

Namespace

-> String

Variable

-> IO Bool

True if the variable is bound

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.

safeRecDerefPtrs :: [LispVal] -> LispVal -> IOThrowsError LispVal Source #

Attempt to dereference pointers safely, without being caught in a cycle

recDerefToFnc :: ([LispVal] -> ThrowsError LispVal) -> [LispVal] -> IOThrowsError LispVal Source #

A helper to recursively dereference all pointers and pass results to a function