Spaces:
Sleeping
Functional Programming in Python with Marimo
π§ This collection is a work in progress.
This series of marimo notebooks introduces the powerful paradigm of functional programming through Python. Taking inspiration from Haskell and Category Theory, we'll build a strong foundation in FP concepts that can transform how you approach software development.
What You'll Learn
Using only Python's standard library, we'll construct functional programming concepts from first principles.
Topics include:
- Recursion and higher-order functions
- Category theory fundamentals
- Functors, applicatives, and monads
- Composable abstractions for robust code
Timeline & Collaboration
I'm currently studying functional programming and Haskell, estimating about 2 months to complete this series. The structure may evolve as the project develops.
If you're interested in collaborating or have questions, please reach out to me on Discord (@eugene.hs). I welcome contributors who share an interest in bringing functional programming concepts to the Python ecosystem.
Running notebooks. To run a notebook locally, use
uvx marimo edit <URL>
For example, run the Functor
tutorial with
uvx marimo edit https://github.com/marimo-team/learn/blob/main/Functional_programming/05_functors.py
You can also open notebooks in our online playground by appending marimo.app/
to a notebook's URL: marimo.app/github.com/marimo-team/learn/blob/main/functional_programming/05_functors.py.
Current series structure
Notebook | Description | Status | Author |
---|---|---|---|
Functional Programming Fundamentals | Core FP principles in Python, comparison with imperative programming, and Haskell-inspired thinking patterns | π§ | |
Higher-Order Functions and Currying | Functions as first-class values, composition patterns, and implementing Haskell-style currying in Python | π§ | |
Python's Functional Toolkit: functools, itertools and operator | Leveraging Python's built-in functional programming utilities, advanced iterator operations, and function transformations | π§ | |
Recursion and Tail Recursion | Recursive problem solving, implementing tail-call optimization in Python, and trampoline techniques to avoid stack overflow | π§ | |
Category Theory and Functors | Introduction to categories, morphisms, functor patterns, and implementing the functor interface and practical use cases | π§ | |
Applicatives and Effectful Programming | Combining independent computations with effects, implementing the applicative interface and practical use cases | π§ | |
Kleisli Category and Monads | Understanding monadic computation, composing impure functions, and implementing basic monads | π§ | |
Monad Fail, Transformers and Fix | Error handling with MonadFail, combining monads with transformers, and handling recursive structures | π§ | |
Monadic Parsing | Building a parser combinator library, implementing recursive descent parsers, and practical text processing | π§ | |
Semigroups and Monoids | Composable operations, algebraic structures, laws, and practical applications for data aggregation | π§ | |
Foldables and Traversables | Abstract folding beyond lists, traversing with effects, and implementing these interfaces for custom data types | π§ | |
Bifunctors | Working with two-parameter type constructors, implementing the bifunctor interface, and practical examples | π§ | |
Arrows | Arrow abstractions beyond monads, implementing the Arrow interface, and creating arrow-based computations | π§ | |
Comonads | Understanding dual concepts to monads, implementing Store and Stream comonads, and practical applications | π§ | |
Design Patterns in Functional Python | Applying FP concepts to solve real-world problems, functional architecture, and testing strategies | π§ |
Description of notebooks
05. Category and Functors
In this notebook, you would learn:
- Why
len
is the Functor from the category oflist concatentation
to the category ofinteger addition
- How to lift an ordinary function to a specific computation context
- How to write an adpter between two categories
References
- Haskellforall.The.Category.Design.Pattern
- Haskellforall.The.Functor.Design.Pattern
- Haskellwiki.Functor
- Haskellwiki.Typeclassopedia#Functor
- Haskellwiki.Typeclassopedia#Category
Authors.
Thanks to all our notebook authors!