metaboulie commited on
Commit
463e388
·
1 Parent(s): 53563a5

Improve notebook and README as suggested by Haleshot

Browse files
functional_programming/05_functors.py CHANGED
@@ -1,3 +1,9 @@
 
 
 
 
 
 
1
  import marimo
2
 
3
  __generated_with = "0.11.17"
@@ -723,19 +729,24 @@ def _(mo):
723
  return
724
 
725
 
 
 
 
 
 
 
 
 
726
  @app.cell(hide_code=True)
727
- def _(Just, Maybe, ftree, inc, mo):
728
  with mo.redirect_stdout():
729
- mftree = Maybe(Just(ftree))
730
- mint = Maybe(Just(1))
731
- mnone = Maybe(None)
732
  print(mftree.check_functor_law())
733
  print(mint.check_functor_law())
734
  print(mnone.check_functor_law())
735
  print(mftree.fmap(inc))
736
  print(mint.fmap(lambda x: x + 1))
737
  print(mnone.fmap(lambda x: x + 1))
738
- return mftree, mint, mnone
739
 
740
 
741
  @app.cell(hide_code=True)
@@ -1205,15 +1216,18 @@ def _(mo):
1205
 
1206
 
1207
  @app.cell
1208
- def _(IntAddition, ListConcatentation, length):
1209
  lista = ListConcatentation([1, 2])
1210
  listb = ListConcatentation([3, 4])
 
1211
 
1212
 
 
 
1213
  length(ListConcatentation.compose(lista, listb)) == IntAddition.compose(
1214
  length(lista), length(listb)
1215
  )
1216
- return lista, listb
1217
 
1218
 
1219
  @app.cell(hide_code=True)
@@ -1248,9 +1262,7 @@ def _(mo):
1248
  @app.cell(hide_code=True)
1249
  def _():
1250
  import marimo as mo
1251
-
1252
- from marimo import md, mermaid
1253
- return md, mermaid, mo
1254
 
1255
 
1256
  @app.cell(hide_code=True)
@@ -1263,11 +1275,15 @@ def _():
1263
  def _():
1264
  from dataclasses import dataclass
1265
  from typing import Callable, Generic, TypeVar
 
 
1266
 
 
 
1267
  a = TypeVar("a")
1268
  b = TypeVar("b")
1269
  c = TypeVar("c")
1270
- return Callable, Generic, TypeVar, a, b, c, dataclass
1271
 
1272
 
1273
  if __name__ == "__main__":
 
1
+ # /// script
2
+ # requires-python = ">=3.9"
3
+ # dependencies = [
4
+ # "marimo",
5
+ # ]
6
+ # ///
7
  import marimo
8
 
9
  __generated_with = "0.11.17"
 
729
  return
730
 
731
 
732
+ @app.cell
733
+ def _(Just, Maybe, ftree):
734
+ mftree = Maybe(Just(ftree))
735
+ mint = Maybe(Just(1))
736
+ mnone = Maybe(None)
737
+ return mftree, mint, mnone
738
+
739
+
740
  @app.cell(hide_code=True)
741
+ def _(inc, mftree, mint, mnone, mo):
742
  with mo.redirect_stdout():
 
 
 
743
  print(mftree.check_functor_law())
744
  print(mint.check_functor_law())
745
  print(mnone.check_functor_law())
746
  print(mftree.fmap(inc))
747
  print(mint.fmap(lambda x: x + 1))
748
  print(mnone.fmap(lambda x: x + 1))
749
+ return
750
 
751
 
752
  @app.cell(hide_code=True)
 
1216
 
1217
 
1218
  @app.cell
1219
+ def _(ListConcatentation):
1220
  lista = ListConcatentation([1, 2])
1221
  listb = ListConcatentation([3, 4])
1222
+ return lista, listb
1223
 
1224
 
1225
+ @app.cell
1226
+ def _(IntAddition, ListConcatentation, length, lista, listb):
1227
  length(ListConcatentation.compose(lista, listb)) == IntAddition.compose(
1228
  length(lista), length(listb)
1229
  )
1230
+ return
1231
 
1232
 
1233
  @app.cell(hide_code=True)
 
1262
  @app.cell(hide_code=True)
1263
  def _():
1264
  import marimo as mo
1265
+ return (mo,)
 
 
1266
 
1267
 
1268
  @app.cell(hide_code=True)
 
1275
  def _():
1276
  from dataclasses import dataclass
1277
  from typing import Callable, Generic, TypeVar
1278
+ return Callable, Generic, TypeVar, dataclass
1279
+
1280
 
1281
+ @app.cell(hide_code=True)
1282
+ def _(TypeVar):
1283
  a = TypeVar("a")
1284
  b = TypeVar("b")
1285
  c = TypeVar("c")
1286
+ return a, b, c
1287
 
1288
 
1289
  if __name__ == "__main__":
functional_programming/README.md CHANGED
@@ -1,24 +1,33 @@
1
- # Functional Programming in Python with Marimo
2
 
3
- _🚧 This collection is a [work in progress](https://github.com/marimo-team/learn/issues/51)._
 
4
 
5
- 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.
 
 
 
6
 
7
  ## What You'll Learn
8
 
9
- **Using only Python's standard library**, we'll construct functional programming concepts from first principles.
 
10
 
11
  Topics include:
12
- - Recursion and higher-order functions
13
- - Category theory fundamentals
14
- - Functors, applicatives, and monads
15
- - Composable abstractions for robust code
 
16
 
17
  ## Timeline & Collaboration
18
 
19
- I'm currently studying functional programming and Haskell, estimating about 2 months or even longer to complete this series. The structure may evolve as the project develops.
 
 
20
 
21
- If you're interested in collaborating or have questions, please reach out to me on Discord (@eugene.hs).
 
22
 
23
  **Running notebooks.** To run a notebook locally, use
24
 
@@ -33,51 +42,20 @@ uvx marimo edit https://github.com/marimo-team/learn/blob/main/Functional_progra
33
  ```
34
 
35
  You can also open notebooks in our online playground by appending `marimo.app/`
36
- to a notebook's URL: [marimo.app/github.com/marimo-team/learn/blob/main/functional_programming/05_functors.py](https://marimo.app/https://github.com/marimo-team/learn/blob/main/functional_programming/05_functors.py).
37
-
38
- ## Current series structure
39
-
40
-
41
- | Notebook | Description | Status | Author |
42
- |----------|-------------|--------|--------|
43
- | Functional Programming Fundamentals | Core FP principles in Python, comparison with imperative programming, and Haskell-inspired thinking patterns | 🚧 | |
44
- | Higher-Order Functions and Currying | Functions as first-class values, composition patterns, and implementing Haskell-style currying in Python | 🚧 | |
45
- | Python's Functional Toolkit: functools, itertools and operator | Leveraging Python's built-in functional programming utilities, advanced iterator operations, and function transformations | 🚧 | |
46
- | Recursion and Tail Recursion | Recursive problem solving, implementing tail-call optimization in Python, and trampoline techniques to avoid stack overflow | 🚧 | |
47
- | Category Theory and Functors | Introduction to categories, morphisms, functor patterns, and implementing the functor interface and practical use cases | `0.1.0` | |
48
- | Applicatives and Effectful Programming | Combining independent computations with effects, implementing the applicative interface and practical use cases | 🚧 | |
49
- | Kleisli Category and Monads | Understanding monadic computation, composing impure functions, and implementing basic monads | 🚧 | |
50
- | Monad Fail, Transformers and Fix | Error handling with MonadFail, combining monads with transformers, and handling recursive structures | 🚧 | |
51
- | Monadic Parsing | Building a parser combinator library, implementing recursive descent parsers, and practical text processing | 🚧 | |
52
- | Semigroups and Monoids | Composable operations, algebraic structures, laws, and practical applications for data aggregation | 🚧 | |
53
- | Foldables and Traversables | Abstract folding beyond lists, traversing with effects, and implementing these interfaces for custom data types | 🚧 | |
54
- | Bifunctors | Working with two-parameter type constructors, implementing the bifunctor interface, and practical examples | 🚧 | |
55
- | Arrows | Arrow abstractions beyond monads, implementing the Arrow interface, and creating arrow-based computations | 🚧 | |
56
- | Comonads | Understanding dual concepts to monads, implementing Store and Stream comonads, and practical applications | 🚧 | |
57
- | Design Patterns in Functional Python | Applying FP concepts to solve real-world problems, functional architecture, and testing strategies | 🚧 | |
58
 
59
  # Description of notebooks
60
 
61
- ## 05. Category and Functors
62
-
63
- In [this notebook](https://github.com/marimo-team/learn/blob/main/Functional_programming/05_functors.py), you would learn:
64
-
65
- * Why `len` is the *Functor* from the category of `list concatentation` to the category of `integer addition`
66
- * How to *lift* an ordinary function to a specific *computation context*
67
- * How to write an *adpter* between two categories
68
-
69
- ### References
70
 
71
- - [The Trivial Monad](http://blog.sigfpe.com/2007/04/trivial-monad.html)
72
- - [Haskellwiki. Category Theory](https://en.wikibooks.org/wiki/Haskell/Category_theory)
73
- - [Haskellforall. The Category Design Pattern](https://www.haskellforall.com/2012/08/the-category-design-pattern.html)
74
- - [Haskellforall. The Functor Design Pattern](https://www.haskellforall.com/2012/09/the-functor-design-pattern.html)
75
- - [Haskellwiki. Functor](https://wiki.haskell.org/index.php?title=Functor)
76
- - [Haskellwiki. Typeclassopedia#Functor](https://wiki.haskell.org/index.php?title=Typeclassopedia#Functor)
77
- - [Haskellwiki. Typeclassopedia#Category](https://wiki.haskell.org/index.php?title=Typeclassopedia#Category)
78
 
79
  **Authors.**
80
 
81
  Thanks to all our notebook authors!
82
 
83
- * [métaboulie](https://github.com/metaboulie)
 
1
+ # Learn Functional Programming
2
 
3
+ _🚧 This collection is a
4
+ [work in progress](https://github.com/marimo-team/learn/issues/51)._
5
 
6
+ This series of marimo notebooks introduces the powerful paradigm of functional
7
+ programming through Python. Taking inspiration from Haskell and Category Theory,
8
+ we'll build a strong foundation in FP concepts that can transform how you
9
+ approach software development.
10
 
11
  ## What You'll Learn
12
 
13
+ **Using only Python's standard library**, we'll construct functional programming
14
+ concepts from first principles.
15
 
16
  Topics include:
17
+
18
+ - Recursion and higher-order functions
19
+ - Category theory fundamentals
20
+ - Functors, applicatives, and monads
21
+ - Composable abstractions for robust code
22
 
23
  ## Timeline & Collaboration
24
 
25
+ I'm currently studying functional programming and Haskell, estimating about 2
26
+ months or even longer to complete this series. The structure may evolve as the
27
+ project develops.
28
 
29
+ If you're interested in collaborating or have questions, please reach out to me
30
+ on Discord (@eugene.hs).
31
 
32
  **Running notebooks.** To run a notebook locally, use
33
 
 
42
  ```
43
 
44
  You can also open notebooks in our online playground by appending `marimo.app/`
45
+ to a notebook's URL:
46
+ [marimo.app/github.com/marimo-team/learn/blob/main/functional_programming/05_functors.py](https://marimo.app/https://github.com/marimo-team/learn/blob/main/functional_programming/05_functors.py).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
  # Description of notebooks
49
 
50
+ Check [here](https://github.com/marimo-team/learn/issues/51) for current series
51
+ structure.
 
 
 
 
 
 
 
52
 
53
+ | Notebook | Description | References |
54
+ | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
55
+ | [05. Category and Functors](https://github.com/marimo-team/learn/blob/main/Functional_programming/05_functors.py) | Learn why `len` is a _Functor_ from `list concatenation` to `integer addition`, how to _lift_ an ordinary function into a _computation context_, and how to write an _adapter_ between two categories. | - [The Trivial Monad](http://blog.sigfpe.com/2007/04/trivial-monad.html) <br> - [Haskellwiki. Category Theory](https://en.wikibooks.org/wiki/Haskell/Category_theory) <br> - [Haskellforall. The Category Design Pattern](https://www.haskellforall.com/2012/08/the-category-design-pattern.html) <br> - [Haskellforall. The Functor Design Pattern](https://www.haskellforall.com/2012/09/the-functor-design-pattern.html) <br> - [Haskellwiki. Functor](https://wiki.haskell.org/index.php?title=Functor) <br> - [Haskellwiki. Typeclassopedia#Functor](https://wiki.haskell.org/index.php?title=Typeclassopedia#Functor) <br> - [Haskellwiki. Typeclassopedia#Category](https://wiki.haskell.org/index.php?title=Typeclassopedia#Category) |
 
 
 
 
56
 
57
  **Authors.**
58
 
59
  Thanks to all our notebook authors!
60
 
61
+ - [métaboulie](https://github.com/metaboulie)