The purpose of Cat library is twofold:
- to provide utility classes and functions that enable the functional programming paradigm in C++.
- to implement an extensible framework of type classes to attain a better reusability of code through the principles of category theory.
The Cat library:
- is lightweight. Each function and object shipped with the library takes advantage of modern C++ features, such as
constexpr constructs, movability, perfect forwarding, etc.
- is written in portable C++14 without macro black-magic, whereas template meta-programming is restricted only to the implementation of type traits.
- implements type traits tailored for generic and functional programming (e.g.
is_callable to mention a few).
- provides utilities, like callable wrappers, which enable functional composition and currying on-top-of any kind of callable types (including
std::bind expressions and generic lambdas).
- provides functions that operate on
std::tuple and generic containers.
- provides utilities that enable perfect forwarding from L/R value containers by means of
- includes an extensible framework for building type classes and provides the implementation of the following ones:
- includes instances of standard C++14 and Technical Specification (TS) containers/types for the above-mentioned type classes.
At the present moment the Cat library is tested under Linux with both glibcxx and libc++ library and with the following compilers:
- clang 3.6
The Cat library takes inspiration from the following projects: