Spaces:
Running
Running
File size: 2,435 Bytes
7339b50 6399834 3c4c5bc 8e62b80 3c4c5bc 9509a36 e485eac 9509a36 e485eac 48feff6 9509a36 48feff6 7139673 3c4c5bc 7139673 9509a36 db2b2a2 e9e13d8 d417768 9509a36 d417768 48c286d 9509a36 48c286d 9509a36 48c286d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# Changelog of the functional-programming course
## 2025-04-11
**functors.py**
+ add `Bifunctor` section
* replace `return NotImplementedError` with `raise NotImplementedError`
## 2025-04-08
**functors.py**
* restructure the notebook
* replace `f` in the function signatures with `g` to indicate regular functions and distinguish from functors
* move `Maybe` funtor to section `More Functor instances`
+ add `Either` functor
+ add `unzip` utility function for functors
## 2025-04-07
**applicatives.py**
* the `apply` method of `Maybe` *Applicative* should return `None` when `fg` or `fa` is `None`
+ add `sequenceL` as a classmethod for `Applicative` and add examples for `Wrapper`, `Maybe`, `List`
+ add description for utility functions of `Applicative`
* refine the implementation of `IO` *Applicative*
* reimplement `get_chars` with `IO.sequenceL`
+ add an example to show that `ListMonoidal` is equivalent to `List` *Applicative*
## 2025-04-06
**applicatives.py**
- remove `sequenceL` from `Applicative` because it should be a classmethod but can't be generically implemented
## 2025-04-02
**functors.py**
+ Migrate to `python3.13`
+ Replace all occurrences of
```python
class Functor(Generic[A])
```
with
```python
class Functor[A]
```
for conciseness
+ Use `fa` in function signatures instead of `a` when `fa` is a *Functor*
**applicatives.py**
* `0.1.0` version of notebook `06_applicatives.py`
## 2025-03-16
**functors.py**
+ Use uppercased letters for `Generic` types, e.g. `A = TypeVar("A")`
+ Refactor the `Functor` class, changing `fmap` and utility methods to `classmethod`
For example:
```python
@dataclass
class Wrapper(Functor, Generic[A]):
value: A
@classmethod
def fmap(cls, f: Callable[[A], B], a: "Wrapper[A]") -> "Wrapper[B]":
return Wrapper(f(a.value))
>>> Wrapper.fmap(lambda x: x + 1, wrapper)
Wrapper(value=2)
```
+ Move the `check_functor_law` method from `Functor` class to a standard function
- Rename `ListWrapper` to `List` for simplicity
- Remove the `Just` class
+ Rewrite proofs
## 2025-03-13
**functors.py**
* `0.1.0` version of notebook `05_functors`
Thank [Akshay](https://github.com/akshayka) and [Haleshot](https://github.com/Haleshot) for reviewing
## 2025-03-11
**functors.py**
* Demo version of notebook `05_functors.py`
|