The implementation of classes and functions is organised in three levels, namely the container, module and view levels. Let us describe them in more details.
- The containers specify the internal representation.
- They provide methods or functions for accessing, scanning, creating, transforming this representation, often through iterators.
Here are some examples:
- The containers are attached to domains (implemented as namespaces):
 linalg; lapack;  upol; bezier; ...
- The domains allow to define (by an external user) specialized algorithms for given containers (through the scope name mechanism) or by derivation and redefinition of functions.
- They are open and thus can be extended easily.
For instance, writting the following code
defines a specialized solve function for the containers of type lapack::rep2d<C>.
- They provide collections of generic implementations which apply to a ``category'' of objects.
- A minimal set of constraints is imposed on the parameters of these generic functions, for containers belonging to a same category.
- They can be combined or extended naturally.
They can be combined or extended naturally. The main modules of the library are
 VECTOR, MATRIX, UPOLDAR, MPOLDST ...
These modules are available in files with the suffixe .m.
- They specify how to manipulate or to see the containers as mathematical objects.
- The internal data is available, via the method rep().
- They are usualy classes, parameterised by the container type Rand sometimes by trait classes which precise the implementation:
- The implementations of these views are based on modules.