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

Portabilityportable
Stabilityexperimental
Maintainergithub.com/justinethier

Language.Scheme.Variables

Contents

Description

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

Synopsis

Environments

printEnv

Arguments

:: Env

Environment

-> IO String

Contents of the env as a string

Show the contents of an environment

copyEnv

Arguments

:: Env

Source environment

-> IO Env

A copy of the source environment

Create a deep copy of an environment

extendEnv

Arguments

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

findNamespacedEnv

Arguments

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

Getters

getVar

Arguments

:: Env

Environment

-> String

Variable

-> IOThrowsError LispVal

Contents of the variable

Retrieve the value of a variable defined in the default namespace

getNamespacedVar

Arguments

:: Env

Environment

-> String

Namespace

-> String

Variable

-> IOThrowsError LispVal

Contents of the variable

Retrieve the value of a variable defined in a given namespace

Setters

defineVar

Arguments

:: Env

Environment

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Bind a variable in the default namespace

defineNamespacedVar

Arguments

:: Env

Environment

-> String

Namespace

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Bind a variable in the given namespace

setVar

Arguments

:: Env

Environment

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Set a variable in the default namespace

setNamespacedVar

Arguments

:: Env

Environment

-> String

Namespace

-> String

Variable

-> LispVal

Value

-> IOThrowsError LispVal

Value

Set a variable in a given namespace

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

A wrapper for updateNamespaceObject that uses the variable namespace.

updateNamespacedObject :: Env -> String -> String -> LispVal -> IOThrowsError LispVal

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

isBound

Arguments

:: Env

Environment

-> String

Variable

-> IO Bool

True if the variable is bound

Determine if a variable is bound in the default namespace

isRecBound

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.

isNamespacedBound

Arguments

:: Env

Environment

-> String

Namespace

-> String

Variable

-> IO Bool

True if the variable is bound

Determine if a variable is bound in a given namespace

isNamespacedRecBound

Arguments

:: Env

Environment

-> String

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

Return a value with a pointer dereferenced, if necessary

recDerefPtrs :: LispVal -> IOThrowsError LispVal

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.