https://github.com/sjbiaga/kittens
Lessons of Scala Cats
https://github.com/sjbiaga/kittens
cats continuations corecursion defer eval fail-fast-semantics functors kleisli monad-transformers monoids natural-transformations recursion sbt scala-cli stack-safety trampoline traverse variance
Last synced: 3 months ago
JSON representation
Lessons of Scala Cats
- Host: GitHub
- URL: https://github.com/sjbiaga/kittens
- Owner: sjbiaga
- Created: 2025-03-12T13:56:15.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-08-15T13:32:05.000Z (5 months ago)
- Last Synced: 2025-08-15T15:38:59.960Z (5 months ago)
- Topics: cats, continuations, corecursion, defer, eval, fail-fast-semantics, functors, kleisli, monad-transformers, monoids, natural-transformations, recursion, sbt, scala-cli, stack-safety, trampoline, traverse, variance
- Language: Scala
- Homepage:
- Size: 752 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Lessons in Scala [`Cats`](https://typelevel.org/cats/typeclasses.html#type-classes-in-cats)
===========================================================================================
[Lesson 01: Covariant vs Contravariant Types](https://github.com/sjbiaga/kittens/blob/main/covariant-1-contravariant/README.md)
- [Exercise 01.1](https://github.com/sjbiaga/kittens/blob/main/covariant-2-contravariant/README.md#exercise-011)
[Lesson 02: Closures and Stack Safety](https://github.com/sjbiaga/kittens/blob/main/queens-1-native/README.md)
[Lesson 03: A Rich Language of Expressions](https://github.com/sjbiaga/kittens/blob/main/expr-01-trait/README.md)
- [Exercise 03.1](https://github.com/sjbiaga/kittens/blob/main/expr-CoflatMap/README.md#exercise-031)
- [Exercise 03.2](https://github.com/sjbiaga/kittens/blob/main/expr-09-ring/README.md#exercise-032)
[Lesson 04: Trampoline and Monads](https://github.com/sjbiaga/kittens/blob/main/queens-3-trampoline/README.md)
- [Exercise 04.1](https://github.com/sjbiaga/kittens/blob/main/kleisli-2-trampoline/README.md#exercise-041)
[Lesson 05: Monoids](https://github.com/sjbiaga/kittens/blob/main/monoid-1-option/README.md)
[Lesson 06: Natural Transformations](https://github.com/sjbiaga/kittens/blob/main/nat-2-trampoline/README.md)
- [Exercise 06.1](https://github.com/sjbiaga/kittens/blob/main/expr-simplify/README.md#exercise-061)
- [Exercise 06.2](https://github.com/sjbiaga/kittens/blob/main/expr-paired/README.md#exercise-062)
- [Exercise 06.3](https://github.com/sjbiaga/kittens/blob/main/expr-tree/README.md#exercise-063)
- [Exercise 06.4](https://github.com/sjbiaga/kittens/blob/main/expr-eert/README.md#exercise-064)
- [Exercise 06.5](https://github.com/sjbiaga/kittens/blob/main/eval-1-function0/README.md#exercise-065)
- [Exercise 06.6](https://github.com/sjbiaga/kittens/blob/main/eval-2-expr-tree/README.md#exercise-066)
- [Exercise 06.7](https://github.com/sjbiaga/kittens/blob/main/nat-4-list/README.md#exercise-067)
[Lesson 07: Traversable](https://github.com/sjbiaga/kittens/blob/main/traverse-1-list/README.md)
- [Exercise 07.1](https://github.com/sjbiaga/kittens/blob/main/traverse-1-list/README.md#exercise-071)
- [Exercise 07.2](https://github.com/sjbiaga/kittens/blob/main/traverse-3-lazylist/README.md#exercise-072)
- [Exercise 07.3](https://github.com/sjbiaga/kittens/blob/main/traverse-3-lazylist/README.md#exercise-073)
- [Exercise 07.4](https://github.com/sjbiaga/kittens/blob/main/traverse-5-set-expr/README.md#exercise-074)
- [Exercise 07.5](https://github.com/sjbiaga/kittens/blob/main/traverse-6-list/README.md#exercise-075)
- [Exercise 07.6](https://github.com/sjbiaga/kittens/blob/main/traverse-7-poke/README.md#exercise-076)
[Lesson 08: Monad Transformers](https://github.com/sjbiaga/kittens/blob/main/mt-1-compose/README.md)
- [Exercise 08.1](https://github.com/sjbiaga/kittens/blob/main/mt-5-ReaderT/README.md#exercise-081)
- [Exercise 08.2](https://github.com/sjbiaga/kittens/blob/main/mt-6-WriterT/README.md#exercise-082)
- [Exercise 08.3](https://github.com/sjbiaga/kittens/blob/main/mt-7-StateT/README.md#exercise-083)
- [Exercise 08.4](https://github.com/sjbiaga/kittens/blob/main/mt-7-StateT/README.md#exercise-084)
- [Exercise 08.5](https://github.com/sjbiaga/kittens/blob/main/mt-7-StateT/README.md#exercise-085)
- [Exercise 08.6](https://github.com/sjbiaga/kittens/blob/main/mt-7-StateT/README.md#exercise-086)
- [Exercise 08.7](https://github.com/sjbiaga/kittens/blob/main/mt-8-ExprT/README.md#exercise-087)
- [Exercise 08.8](https://github.com/sjbiaga/kittens/blob/main/mt-9-WriterT-Validated/README.md#exercise-088)
[Lesson 09: Recursion](https://github.com/sjbiaga/kittens/blob/main/recursion-1-lambda-calculus/README.md)
- [Exercise 09.1](https://github.com/sjbiaga/kittens/blob/main/recursion-2-schemes/README.md#exercise-091)
- [Exercise 09.2](https://github.com/sjbiaga/kittens/blob/main/recursion-2-schemes/README.md#exercise-092)
- [Exercise 09.3](https://github.com/sjbiaga/kittens/blob/main/recursion-2-schemes/README.md#exercise-093)
- [Exercise 09.4](https://github.com/sjbiaga/kittens/blob/main/recursion-4-Defer/README.md#exercise-094)
Examples
========
Make a backup of `~/.dotty_history`, then copy the `.dotty_history` from some lesson, and launch the `REPL`:
scala-cli repl -S 3.7.3-RC2 --dep org.typelevel::cats-effect:3.6.3 \
--dep org.typelevel::cats-core:2.13.0 \
--dep org.typelevel::cats-free:2.13.0 \
--dep org.typelevel::algebra:2.13.0 \
--dep org.scala-lang.modules::scala-parser-combinators:2.4.0
Execute _each_ line from the beginning, in this order.
Projects
========
Each project is named `kittens` built with `SBT` developed in Scala 3.