\chapter{Introduction}
\pagenumbering{arabic}%

\section{Purpose}

\sysname{} is a library that supplies a collection of different kinds
of \emph{trees}.

\sysname{} differs from other libraries with trees, such as
\texttt{cl-containers} in that it has a \emph{stratified design}.
This design allows client code to intervene at all levels, from the
level of near-concrete representation of the trees, up to the most
abstract interface where the trees are used as dictionaries,
sequences, or some other abstract data types.

The main purpose of \sysname{} is to provide trees as \emph{concrete
  data types}, which means that it exposes the representation of these
trees, as opposed to hiding this representation beneath an abstract
data type such as a dictionary.  Client code can then build abstract
data types from the classes and operations supplied by \sysname{}.

Also, the stratified design makes it possible for client code to use
the lower levels of abstraction of \sysname{} in order to create
completely new abstractions, not foreseen by this library.

The price to pay for this stratified design is, of course, that lower
abstraction levels are exposed to client code, and are therefore
limited in the way that they can evolve.  As a consequence, we have
tried to create these lower abstraction levels in a way that they are
unlikely to require radical modifications.

In the current version of \sysname{} only binary trees are supported.
See \refChap{chap-future} for future plans to add more trees and more
algorithms.
