{"id":13614924,"url":"https://github.com/sfermigier/awesome-functional-python","last_synced_at":"2025-09-28T14:31:04.593Z","repository":{"id":38360906,"uuid":"76450431","full_name":"sfermigier/awesome-functional-python","owner":"sfermigier","description":"A curated list of awesome things related to functional programming in Python.","archived":false,"fork":false,"pushed_at":"2024-05-13T05:58:42.000Z","size":114,"stargazers_count":2220,"open_issues_count":5,"forks_count":133,"subscribers_count":77,"default_branch":"main","last_synced_at":"2024-05-19T21:16:47.568Z","etag":null,"topics":["awesome","functional-programming","python"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sfermigier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-12-14T10:42:03.000Z","updated_at":"2024-05-29T05:06:24.068Z","dependencies_parsed_at":"2024-04-08T23:46:34.894Z","dependency_job_id":"1d10560a-10bf-4a0f-a2de-82104338d64f","html_url":"https://github.com/sfermigier/awesome-functional-python","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfermigier%2Fawesome-functional-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfermigier%2Fawesome-functional-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfermigier%2Fawesome-functional-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfermigier%2Fawesome-functional-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sfermigier","download_url":"https://codeload.github.com/sfermigier/awesome-functional-python/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234525631,"owners_count":18846937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["awesome","functional-programming","python"],"created_at":"2024-08-01T20:01:07.081Z","updated_at":"2025-09-28T14:31:04.586Z","avatar_url":"https://github.com/sfermigier.png","language":null,"readme":"## Awesome Functional Python\n\n\u003e A curated list of awesome things related to functional programming in Python.\n\n[![Awesome](https://awesome.re/badge.svg)](https://awesome.re)\n\n- [Official documentation](#official-documentation)\n- [Books](#books)\n- [Talks](#talks)\n- [Other resources](#other-resources)\n- [Libraries](#libraries)\n- [Languages](#languages)\n\n### Official documentation\n\n- [Functional Programming HOWTO](https://docs.python.org/3/howto/functional.html) - \"In this document, we’ll take a tour of Python’s features suitable for implementing programs in a functional style\".\n\n### Books\n\n#### Free books / ebooks\n\n- [Functional Programming in Python](http://www.oreilly.com/programming/free/files/functional-programming-python.pdf) - Book by David Mertz (O'Reilly).\n\n#### Non-free books\n\n- [Functional Python Programming](https://www.packtpub.com/application-development/functional-python-programming) - Book by Steve Lott (Packtpub, 2015).\n\n### Talks\n\n#### Introductory\n\n- Functional Programming with Python ([slides](http://kachayev.github.io/talks/uapycon2012/)) - Alexey Kachayev, UA PYCon 2012.\n- Purely Functional Programming in Python: Pure Fun ([slides](https://speakerdeck.com/radix/purely-functional-programming-in-python-pure-fun)) - Christopher Armstrong, PyTenessee 2015.\n- Side Effects are a Public API ([video](https://www.youtube.com/watch?v=D37dc9EoFus)) - Christopher Armstrong, Strangeloop 2015\n- Functional Programming with Python ([video](https://www.youtube.com/watch?v=Ta1bAMOMFOI)) - Mike Müller, PyCon US 2013.\n- Using Functional Programming for efficient Data Processing and Analysis ([video](https://www.youtube.com/watch?v=9kDUTJahXBM)) - Reuben Cummings, PyCon US 2017.\n- Immutable Programming Writing Functional Python ([slides](https://speakerdeck.com/pycon2017/calen-pennington-immutable-programming-writing-functional-python), [video](https://www.youtube.com/watch?v=_OLEVvjrIj8)), Calen Pennington, PyCon 2017.\n- Functional Programming inside OOP? It’s possible with Python ([Slides](https://ep2021.europython.eu/media/conference/slides/5SQrJC4-functional-programming-inside-oop-its-possible-with-python.pdf)) - Carlos Villavicencio, EuroPython 2021.\n- A Hitchhiker’s Guide to functools ([Slides](https://ep2021.europython.eu/media/conference/slides/a-hitchhikers-guide-to-functools.pdf)) - Scott Irwin, EuroPython 2021.\n- Writing Functional Code in Python ([Video](https://www.youtube.com/watch?v=x7sQVLO3JJA)) - Vic Kumar, PyCon 2022\n\n#### Advanced or specialized\n\n- Functionalish programming in Python with effect ([video](https://www.youtube.com/watch?v=fM5d_2BS6FY)), Robert Collins, NZ PyCon 2015.\n- Monadic Parsing in Python ([slides](https://speakerdeck.com/kachayev/monadic-parsing-in-python)), Alexey Kachayev, KyivPy 2014.\n- Immutability and Python - Introducing Pyrsistent ([slides](http://slides.com/tobiasgustafsson/immutability-and-python)), Tobias Gustafsson, 2014.\n- Understanding Transducers ([slides](http://www.slideshare.net/alinadolgikh/austin-bingham-transducers-in-python), [video](https://www.youtube.com/watch?v=z_cmmbRQXh4)), Austin Bingham, PyCon Belarus 2015.\n\n#### Data science oriented\n\n- Functional Performance with Core Data Structures ([video](https://www.youtube.com/watch?v=PpBK4zIaFLE)), Matthew Rocklin, PyData SV 2014.\n- Old School - Functional Data Analysis ([video](https://vimeo.com/80096814)), Matthew Rocklin, PyData NYC 2013.\n- Learning Data Science Using Functional Python ([video](https://www.youtube.com/watch?v=ThS4juptJjQ), [slides](https://docs.google.com/presentation/d/1eI60SL3UxtWfr9ktrv48-pcIkk4S7JiDmeXGCyyGhCs)), Joel Grus, PyData Seattle 2015.\n\n### Other resources\n\n#### Video lectures (not free)\n\n- [Functional Programming with Python](http://shop.oreilly.com/product/0636920042778.do) - by Christopher Armstrong, O'Reilly.\n- [Functional Programming in 7 days](https://www.udemy.com/functional-programming-in-7-days/) - by Mohammed Kashif, Udemy.\n- [Functional Programming in Python](https://realpython.com/courses/functional-programming-python/) - by Dan Bader, Real Python.\n\n#### Blog posts\n\n- [Origins of Python's \"Functional\" Features](https://python-history.blogspot.fr/2009/04/origins-of-pythons-functional-features.html), Guido Van Rossum, 2009.\n- [A practical introduction to functional programming](https://maryrosecook.com/blog/post/a-practical-introduction-to-functional-programming) (with examples in Python), by Mary Rose Cook (year unknown).\n- [Immutable data structures in Python](https://www.theguardian.com/info/developer-blog/2014/oct/21/immutable-data-structures-in-python), Robert Rees, 2014.\n- [Understanding Transducers through Python](http://sixty-north.com/blog/series/understanding-transducers-through-python), by Robert Smallshire. \"In this 8 parts series we take an in-depth look at transducers. Transducers – a portmanteau of ‘transform reducers’ – are a new functional programming concept introduced into the Clojure programming language.\"\n- [Thinking Functionally with Python and Django at eShares Inc.](https://medium.com/@hansonkd/thinking-functionally-with-python-and-django-4127e3ace6e9#.own6sie8s), Kyle Hanson, 2017.\n- [Simple dependent types in Python](https://sobolevn.me/2019/01/simple-dependent-types-in-python) - Nikita Sobolev, 2019.\n- [Python exceptions considered an anti-pattern](https://sobolevn.me/2019/02/python-exceptions-considered-an-antipattern), Nikita Sobolev, 2019.\n- [Enforcing Single Responsibility Principle in Python](https://sobolevn.me/2019/03/enforcing-srp) - Nikita Sobolev, 2019.\n- [Typed functional Dependency Injection in Python](https://sobolevn.me/2020/02/typed-functional-dependency-injection) - Nikita Sobolev, 2020.\n- [4 Part Series on Functional Programming Techniques and Design In Python](https://mpkocher.github.io/2019/03/01/Functional-Programming-Techniques-In-Python-Series/) M. Kocher, 2019.\n- [Typeclasses in Python](https://sobolevn.me/2021/06/typeclasses-in-python) - N. Sobolev, 2021\n- [Functools — The Power of Higher-Order Functions in Python](https://towardsdatascience.com/functools-the-power-of-higher-order-functions-in-python-8e6e61c6e4e4) - M. Heinz, 2021\n- [Tail Recursion Elimination](http://neopythonic.blogspot.com/2009/04/tail-recursion-elimination.html) - Guido van Rossum, 2009\n- [Final Words on Tail Calls](http://neopythonic.blogspot.com/2009/04/final-words-on-tail-calls.html) - Guido van Rossum, 2009\n- [The fate of reduce() in Python 3000](https://www.artima.com/weblogs/viewpost.jsp?thread=98196) - Guido van Rossum, 2005\n- [Best Practices for Using Functional Programming in Python ](https://www.kite.com/blog/python/functional-programming/) - Kite Blog, 2018.\n- (Dead initiative) [Why we need a Python functional programming initiative: a manifesto](https://web.archive.org/web/20230529183919/https://www.leftfile.org/) - Leftfile 2023\n\n#### Scientific papers\n\n- [Practical Functional Reactive Programming](http://www.cs.jhu.edu/~roe/padl2014.pdf) (PDF), John Peterson, Ken Roe, and Alan Cleary, 2014.\n\n#### Presentation slides\n\n- [Python Generators](https://www.slideshare.net/SamuelLampa/py-sthlmmeetup15-pythongenerators), Samuel Lampa, From talk at PySthlm meetup, Oct 2013\n\n### Libraries\n\n#### General\n\n- [toolz](https://github.com/pytoolz/toolz) ★5011 - \"A functional standard library for Python\".\n- [more-itertools](https://github.com/erikrose/more-itertools) ★3955 - \"More routines for operating on iterables, beyond itertools\".\n- [funcy](https://github.com/suor/funcy) ★3449 - \"A fancy and practical functional tools\".\n- [fn.py](https://github.com/kachayev/fn.py) ★3378 - \"Functional programming in Python: implementation of missing features to enjoy FP\" (unmaintained since 2014). [Unmaintained fork](https://github.com/fnpy/fn.py).\n- [PyFunctional](https://github.com/EntilZha/PyFunctional) ★2467 - \"Python library for functional programming with collections in a data pipeline style\".\n- [Pipe](https://github.com/JulienPalard/Pipe) ★2060 - \"A Python library to use infix notation in Python\".\n- [Pydash](https://github.com/dgilland/pydash) ★1395 - \"The kitchen sink of Python utility libraries for doing \"stuff\" in a functional way. Based on the Lo-Dash Javascript library\".\n- [hask](https://github.com/billpmurphy/hask) ★870 - \"Haskell language features and standard libraries in pure Python\".\n- [OSlash](https://github.com/dbrattli/oslash) ★731 - \"Functors, Applicatives, And Monads in Python\".\n- [Expression](https://github.com/cognitedata/Expression) ★672 - \"Pragmatic functional programming for Python inspired by F#\". Successor of OSlash.\n- [Effect](https://github.com/python-effect/effect) ★382 - \"Effect isolation in Python, to facilitate more purely functional code\".\n- [Underscore.py](https://github.com/serkanyersen/underscore.py) ★292 - \"A Python port of excellent javascript library underscore.js\".\n- [fnc](https://github.com/dgilland/fnc) ★271 - \"Functional programming in Python with generators and other utilities\".\n- [PyMonad](https://github.com/jasondelaat/pymonad) ★209 - \"a small library implementing monads and related data abstractions -- functors, applicative functors, and monoids -- for use in implementing functional style programs\".\n- [Flupy](https://github.com/olirice/flupy) ★195 - Implements a fluent interface for operating on python iterables.\n- [pfun](https://github.com/suned/pfun) ★154 - \"Pure functional programming in python\".\n- [Phi](https://github.com/cgarciae/phi) ★136 - \"A library that intends to remove as much of the pain as possible from your functional programming experience in Python.\"\n- [pyramda](https://github.com/jackfirth/pyramda) ★126 - \"Python package supporting heavy functional programming through currying. Translation of the Ramda library from javascript to python\".\n- [unpythonic](https://github.com/Technologicat/unpythonic) ★99 - \"Supercharge your Python with parts of Lisp and Haskell.\"\n- [ziopy](https://github.com/miiohio/ziopy) ★85 - \"ZIO for Python (with ZIO = A type-safe, composable library for async and concurrent programming in Scala)\"\n- [pyMonet](https://github.com/przemyslawjanpietrzak/pyMonet) ★35 - \"High abstract python library for functional programming. Contains algebraic data structures known from Haskell or Scala\".\n- [Compose](https://github.com/mentalisttraceur/python-compose) ★33 - The classic compose, with all the Pythonic features.\n- [pyeffects](https://github.com/vickumar1981/pyeffects) ★33 - \"Handle side-effects in Python like a boss. Implements functional types for Either, Option, Try, and Future.\"\n- [Iterpy](https://github.com/MartinBernstorff/Iterpy) ★10 - map, filter etc. as methods on a sequence.\n\n#### Return types\n\n- [returns](https://github.com/dry-python/returns) ★4049 - \"Make your functions return something meaningful, typed, and safe!\"\n- [result](https://github.com/rustedpy/result) ★1675 - (Unmaintained) A simple Rust like Result type for Python 3. Fully type annotated.\n- [Option](https://github.com/MaT1g3R/option) ★97 - Rust-like Option and Result types in Python.\n- [Meiga](https://github.com/alice-biometrics/meiga) ★80 - A simple, typed and monad-based Result type for Python.\n- [maybe](https://github.com/rustedpy/maybe) ★69 - (Unmaintained) A simple Rust like Maybe type for Python 3. Fully type annotated.\n- [Safetywrap](https://github.com/mplanchard/safetywrap) ★46 - Fully typesafe, Rust-like Result and Option types for Python.\n\n#### Immutable / persistent data structures\n\n- [Pyrsistent](https://github.com/tobgu/pyrsistent) ★2112 - \"Persistent/Immutable/Functional data structures for Python\".\n- [Immutables](https://github.com/MagicStack/immutables) ★1176 - \"An immutable mapping type for Python.\"\n\nDead projects:\n\n- [Discodb](https://github.com/discoproject/discodb) ★98 - \"An efficient, immutable, persistent mapping object\".\n- [Funktown](https://github.com/zhemao/funktown) ★76 - \"Immutable Data Structures for Python\".\n- [Amino](https://github.com/tek/amino) ★36 - \"functional data structures and type classes\".\n- [Pysistence](https://pythonhosted.org/pysistence/) - \"Pysistence is a project that seeks to make functional programming in python easier\".\n\n#### Pattern matching\n\nNote: Pattern matching is now a standard feature in [Python 3.10](https://www.python.org/dev/peps/pep-0636/).\n\n- [pampy](https://github.com/santinic/pampy) ★3526 - \"Pampy: The Pattern Matching for Python you always dreamed of.\"\n- [python-pattern-matching](https://github.com/grantjenks/python-pattern-matching) ★160 - \"Python pattern matching like functional languages.\"\n- [patmat](https://github.com/admk/patmat) ★29 - \"Functional-style recursive pattern matching in Python. Crazy stuff.\"\n- [apm](https://github.com/scravy/awesome-pattern-matching) ★110 - \"Pattern Matching for Python 3.8+ in a simple, yet powerful, extensible manner.\"\n\n#### Tranducers\n\n(Both projects are dead).\n\n- [Tranducers-Python](https://github.com/cognitect-labs/transducers-python) ★203 - \"Transducers are composable algorithmic transformations\".\n- [Transducers](https://github.com/sixty-north/python-transducers) ★58 - \"This is a port of the transducer concept from Clojure to Python, with an emphasis on providing as Pythonic as interpretation of transducers as possible, rather than reproducing Clojurisms more literally\".\n\n#### Support for reactive style\n\n- [RxPy](https://github.com/ReactiveX/RxPY) ★4940 - \"Reactive Extensions for Python\".\n- [broqer](https://github.com/semiversus/python-broqer) ★74 - \"Library to operate with continuous streams of data in a reactive style\"\n- [sodium-python](https://github.com/mode89/sodium-python) ★4 - \"Python implementation of Sodium - Functional Reactive Programming (FRP) Library\"\n\n#### Lenses and declarative data manipulations\n\n- [Glom](https://github.com/mahmoud/glom) ★2062 - \"Python's nested data operator (and CLI), for all your declarative restructuring needs.\".\n- [python-lenses](https://github.com/ingolemo/python-lenses) ★325 - \"A python lens library for manipulating deeply nested immutable structures\".\n\n#### Other / specialized\n\n- [deal](https://github.com/orsinium/deal) ★825 - \"Design by contract for Python with many validators support.\"\n- [classes](https://github.com/dry-python/classes) ★716 - \"Smart, pythonic, ad-hoc, typed polymorphism for Python.\"\n- [chainable](https://github.com/olirice/chainable) ★195 - \"Method chaining built on generators\".\n- [ADT](https://github.com/jspahrsummers/adt) ★172 - Algebraic data types for Python\n- [sumtypes](https://github.com/radix/sumtypes) ★44 - \"Sum Types, aka Tagged Unions, for Python\".\n- [python-mini-lambda](https://github.com/smarie/python-mini-lambda) ★14 - \"Simple Lambda functions without lambda x: and with string conversion capability\"\n- [slist](https://github.com/thejaminator/slist) ★13 - \"A drop-in replacement for the python mutable list. But with much more methods for typesafe method chaining.\"\n- [Orinoco](https://github.com/paysure/orinoco) ★11 - \"Functional composable pipelines allowing clean separation of the business logic and its implementation\"\n- [py-frm](https://github.com/phelps-sg/py-frm) ★1 - \"Proof-of-concept Functional-Relational Mapping (FRM) for Python\"\n\n### Languages\n\nFunctional programming languages that are not Python but are related to the Python ecosystem:\n\n#### Active languages\n\n- [Hy](https://github.com/hylang/hy) ★5265 - \"A dialect of Lisp that's embedded in Python\".\n- [Coconut](https://github.com/evhub/coconut) ★4245 - \"Simple, elegant, Pythonic functional programming\".\n- [Basilisp](https://github.com/basilisp-lang/basilisp) ★386 - \"A Clojure-compatible(-ish) Lisp dialect targeting Python 3.8+\".\n\n#### Dead languages\n\n- [pixie](https://github.com/pixie-lang/pixie) ★2352 - \"A lightweight and native lisp built in RPython\". ([Discussion on HN](https://news.ycombinator.com/item?id=13420092))\n- [Mochi](https://github.com/i2y/mochi) ★913 - \"A dynamically typed programming language for functional programming and actor-style programming.\".\n- [dg (aka dogelang)](https://github.com/pyos/dg) ★578 - \"A programming language that compiles to CPython bytecode, much like Scala compiles to JVM's. That essentially means that dg is an alternative syntax for Python 3.\"\n- [Pycket](https://github.com/pycket/pycket) ★266 - \"A rudimentary Racket implementation using RPython\".\n- [Tydy](https://github.com/cyrus-/tydy) ★52 - \"Tydy is a statically typed, functional-first programming language in the ML tradition. tydy is an implementation of Tydy as a Python library.\"\n- [Arza](https://github.com/gloryofrobots/arza) ★4 - \"Arza is a functional programming language that compiles to Python. It is a statically typed language with type inference and type classes.\"\n- [(How to Write a (Lisp) Interpreter (in Python))](http://norvig.com/lispy.html) and [(An ((Even Better) Lisp) Interpreter (in Python))](http://norvig.com/lispy2.html) - a couple of famous articles by Peter Norvig.\n\n[More languages that compile to Python](https://github.com/vindarel/languages-that-compile-to-python).\n","funding_links":[],"categories":["HarmonyOS","Others","Other Lists","Awesome","Computational"],"sub_categories":["Windows Manager","TeX Lists","[Elm](http://elm-lang.org)","Neat python"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsfermigier%2Fawesome-functional-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsfermigier%2Fawesome-functional-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsfermigier%2Fawesome-functional-python/lists"}