Sidekick’s documentation

Warning

Beta software You are using a software that has not reached a stable version yet. Please beware that interfaces might change, APIs might disappear and general breakage can occur before 1.0.

If you plan to use this software for something important, please read the roadmap, and the issue tracker in Github. If you are unsure about the future of this project, please talk to the developers, or (better yet) get involved with the development of Sidekick!

Overview

Sidekick is a functional library of functions and types designed to make functional programming more pleasant in Python. It emphasizes working with simple functions, immutable and data-centric types and iterators.

Sidekick uses (or maybe abuses) Python expressiveness to introduce some specific domain syntax and idioms that makes functional programming more natural, easy to use and still somewhat Pythonic. This approach distinguishes Sidekick from other projects like toolz, which explicitly aim to provide “low-tech” solutions based on common idioms or other libraries that simply port ideas and libraries from other programming languages to Python (even when that means alien Haskell-isms).

There are obvious limitations of what we can do syntax-wise as a library, and more so in what we can provide that will still play nicely with the rest of Python ecosystem. Sidekick is just one proposal in trying to find a nice balance between practicality and theoretical purity, between expressiveness and familiarity. There are many other excellent libraries in this landscape which can also be used alongside with Sidekick, and we certainly want to encourage you to explore other options in Python and in other programming languages as well.

So, what’s up with functional programming?

Since functional programming (FP) means different things to different people, it is perhaps necessary to point out where we want to go with Sidekick. People often point at correctness, composability and ease of debugging and testing as major motivations. Those are certainly worthy goals when trying to design any system and functional programming offers some guidelines that help us to stay on track. Those ideas are fundamental to grasp real FP languages like Haskell, but are also useful in generic multi-paradigm languages such as Python.

Indices and tables