Category theory now occupies a central position not only in contemporary mathematics, but also in theoretical computer science and even in mathematical physics. It can roughly be described as a general mathematical theory of structures and systems of structures. It is at the very least a very powerful language or conceptual framework which allows us to see, among other things, how structures of different kinds are related to one another as well as the universal components of a family of structures of a given kind. A category is an abstract structure: a collection of objects, together with a collection of morphisms between them. For example, the object could be geometric figures and the morphisms could be ways of transforming one into another; or the objects might be data types and the morphisms programs. Category theory is the algebra of functions; the principal operation on functions is taken to be composition. Whenever we calculate by composing functions (for example, in iteration a function) there is a category behind our calculations.