Coder Social home page Coder Social logo

cat's Introduction

Cat: C++20 functional library

What is cat?

Cat is a C++20 functional library inspired by category theory and Haskell language. The purpose of cat is to provide utility functions and type classes to enable the functional programming paradigm in C++.

Rationale

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.

Features

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++20 without macro black-magic, whereas template meta-programming is restricted only to the mechanics of type traits.

  • implements type traits tailored for generic and functional programming (e.g. is_container, is_associative_container, function_type, function_arity, return_type, 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 forward_as and forward_iterator.

  • includes an extensible framework for building type classes and provides the implementation of the following ones:

    • Functor
    • Bifunctor
    • Applicative
    • Alternative
    • Monoid
    • Monad
    • MonadPlus
    • Foldable
    • Show
    • Read
    • ...
  • includes instances of standard C++20 and Technical Specification (TS) containers/types for the above-mentioned type classes.

Notes

At the present moment the Cat library is tested under Linux and MacOS with both glibcxx and libc++ library and with the following compilers:

  • clang 14.0
  • clang 6.0

Acknowledgements

The Cat library takes inspiration from the following projects:

cat's People

Contributors

awgn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cat's Issues

feature request: implement Category typeclass

Hi Nicola,

Thank you for implementing cat.
Did you implement the equivalent of Category typeclass in cat? If no, would you mind implementing it? So that C++ software engineers can know the concept of Category easier.

Thanks

Please keep working on this

I support the work you are doing and really want to see this project continue and be successful. I am surprised at how few people have contributed, and I am new to C++ so I am a very long way from doing so. However, I very much want to use funcitonal Haskell methodology in C++. I hope you get more support soon.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.