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

CopyrightJustin Ethier
LicenseMIT (see LICENSE in the distribution)
Maintainergithub.com/justinethier
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell98

Language.Scheme.Variables

Contents

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