Skip to content

rnrs conditions

The (rnrs condition (6)) library provides forms and procedures for constructing new condition types, as well as a library of pre-defined condition types that represent a variety of common exceptional situations. Conditions are records of a subtype of the &condition record type, which is neither sealed nor opaque. See R6RS Records.

Conditions may be manipulated singly, as simple conditions, or when composed with other conditions to form compound conditions. Compound conditions do not “nest”—constructing a new compound condition out of existing compound conditions will “flatten” them into their component simple conditions. For example, making a new condition out of a &message condition and a compound condition that contains an &assertion condition and another &message condition will produce a compound condition that contains two &message conditions and one &assertion condition.

The record type predicates and field accessors described below can operate on either simple or compound conditions. In the latter case, the predicate returns #t if the compound condition contains a component simple condition of the appropriate type; the field accessors return the requisite fields from the first component simple condition found to be of the appropriate type.

Guile’s R6RS layer uses core exception types from the (ice-9 exceptions) module as the basis for its R6RS condition system. Guile prefers to use the term “exception object” and “exception type” rather than “condition” or “condition type”, but that’s just a naming difference. Guile also has different names for the types in the condition hierarchy. See Exception Objects, for full details.

This library is quite similar to the SRFI-35 conditions module (see SRFI-35 - Conditions). Among other minor differences, the (rnrs conditions) library features slightly different semantics around condition field accessors, and comes with a larger number of pre-defined condition types. The two APIs are compatible; the condition? predicate from one API will return #t when applied to a condition object created in the other. of the condition types are the same, also.

Condition Type: &condition

Scheme Procedure: condition? obj

The base record type for conditions. Known as &exception in core Guile.

Scheme Procedure: condition condition1 ...

Scheme Procedure: simple-conditions condition

The condition procedure creates a new compound condition out of its condition arguments, flattening any specified compound conditions into their component simple conditions as described above.

simple-conditions returns a list of the component simple conditions of the compound condition condition, in the order in which they were specified at construction time.

Scheme Procedure: condition-predicate rtd

Scheme Procedure: condition-accessor rtd proc

These procedures return condition predicate and accessor procedures for the specified condition record type rtd.

Scheme Syntax: define-condition-type condition-type supertype constructor predicate field-spec ...

Evaluates to a new record type definition for a condition type with the name condition-type that has the condition type supertype as its parent. A default constructor, which binds its arguments to the fields of this type and its parent types, will be bound to the identifier constructor; a condition predicate will be bound to predicate. The fields of the new type, which are immutable, are specified by the field-specs, each of which must be of the form:

emacs-lisp
(field accessor)

where field gives the name of the field and accessor gives the name for a binding to an accessor procedure created for this field.

Condition Type: &message

Scheme Procedure: make-message-condition message

Scheme Procedure: message-condition? obj

Scheme Procedure: condition-message condition

A type that includes a message describing the condition that occurred.

Condition Type: &warning

Scheme Procedure: make-warning

Scheme Procedure: warning? obj

A base type for representing non-fatal conditions during execution.

Condition Type: &serious

Scheme Procedure: make-serious-condition

Scheme Procedure: serious-condition? obj

A base type for conditions representing errors serious enough that cannot be ignored. Known as &error in core Guile.

Condition Type: &error

Scheme Procedure: make-error

Scheme Procedure: error? obj

A base type for conditions representing errors. Known as &external-error in core Guile.

Condition Type: &violation

Scheme Procedure: make-violation

Scheme Procedure: violation?

A subtype of &serious that can be used to represent violations of a language or library standard. Known as &programming-error in core Guile.

Condition Type: &assertion

Scheme Procedure: make-assertion-violation

Scheme Procedure: assertion-violation? obj

A subtype of &violation that indicates an invalid call to a procedure. Known as &assertion-failure in core Guile.

Condition Type: &irritants

Scheme Procedure: make-irritants-condition irritants

Scheme Procedure: irritants-condition? obj

Scheme Procedure: condition-irritants condition

A base type used for storing information about the causes of another condition in a compound condition.

Condition Type: &who

Scheme Procedure: make-who-condition who

Scheme Procedure: who-condition? obj

Scheme Procedure: condition-who condition

A base type used for storing the identity, a string or symbol, of the entity responsible for another condition in a compound condition.

Condition Type: &non-continuable

Scheme Procedure: make-non-continuable-violation

Scheme Procedure: non-continuable-violation? obj

A subtype of &violation used to indicate that an exception handler invoked by raise has returned locally.

Condition Type: &implementation-restriction

Scheme Procedure: make-implementation-restriction-violation

Scheme Procedure: implementation-restriction-violation? obj

A subtype of &violation used to indicate a violation of an implementation restriction.

Condition Type: &lexical

Scheme Procedure: make-lexical-violation

Scheme Procedure: lexical-violation? obj

A subtype of &violation used to indicate a syntax violation at the level of the datum syntax.

Condition Type: &syntax

Scheme Procedure: make-syntax-violation form subform

Scheme Procedure: syntax-violation? obj

Scheme Procedure: syntax-violation-form condition

Scheme Procedure: syntax-violation-subform condition

A subtype of &violation that indicates a syntax violation. The form and subform fields, which must be datum values, indicate the syntactic form responsible for the condition.

Condition Type: &undefined

Scheme Procedure: make-undefined-violation

Scheme Procedure: undefined-violation? obj

A subtype of &violation that indicates a reference to an unbound identifier. Known as &undefined-variable in core Guile.