husk-scheme-3.11: R5RS Scheme interpreter, compiler, and library.

Portabilityportable
Stabilityexperimental
Maintainergithub.com/justinethier
Safe HaskellSafe-Inferred

Language.Scheme.Variables

Contents

Description

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

Synopsis

Environments

printEnvSource

Arguments

:: Env

Environment

-> IO String

Contents of the env as a string

Show the contents of an environment

exportsFromEnv :: Env -> IO [LispVal]Source

Return a list of symbols exported from an environment

copyEnvSource

Arguments

:: Env

Source environment

-> IO Env

A copy of the source environment

Create a deep copy of an environment

extendEnvSource

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.

importEnvSource

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 EnvSource

Find the top-most environment

findNamespacedEnvSource

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 :: CharSource

Internal namespace for macros

varNamespace :: CharSource

Internal namespace for variables

Getters

getVarSource

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

getNamespacedVarSource

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

Setters

defineVarSource

Arguments

:: Env

Environment

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Bind a variable in the default namespace

defineNamespacedVarSource

Arguments

:: Env

Environment

-> Char

Namespace

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Bind a variable in the given namespace

setVarSource

Arguments

:: Env

Environment

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Set a variable in the default namespace

setNamespacedVarSource

Arguments

:: Env

Environment

-> Char

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 -> Char -> 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

isBoundSource

Arguments

:: Env

Environment

-> String

Variable

-> IO Bool

True if the variable is bound

Determine if a variable is bound in the default namespace

isRecBoundSource

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.

isNamespacedRecBoundSource

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 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.