{"id":30310223,"url":"https://github.com/sjbiaga/kittens","last_synced_at":"2025-10-30T13:05:16.160Z","repository":{"id":310068466,"uuid":"947318336","full_name":"sjbiaga/kittens","owner":"sjbiaga","description":"Lessons of Scala Cats","archived":false,"fork":false,"pushed_at":"2025-08-15T13:32:05.000Z","size":770,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-15T15:38:59.960Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/sjbiaga.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,"zenodo":null}},"created_at":"2025-03-12T13:56:15.000Z","updated_at":"2025-08-15T13:32:08.000Z","dependencies_parsed_at":"2025-08-15T15:49:05.571Z","dependency_job_id":null,"html_url":"https://github.com/sjbiaga/kittens","commit_stats":null,"previous_names":["sjbiaga/kittens"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/sjbiaga/kittens","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjbiaga%2Fkittens","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjbiaga%2Fkittens/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjbiaga%2Fkittens/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjbiaga%2Fkittens/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sjbiaga","download_url":"https://codeload.github.com/sjbiaga/kittens/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjbiaga%2Fkittens/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270856775,"owners_count":24657700,"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","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cats","continuations","corecursion","defer","eval","fail-fast-semantics","functors","kleisli","monad-transformers","monoids","natural-transformations","recursion","sbt","scala-cli","stack-safety","trampoline","traverse","variance"],"created_at":"2025-08-17T14:09:15.101Z","updated_at":"2025-10-16T00:20:18.659Z","avatar_url":"https://github.com/sjbiaga.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"Lessons in Scala [`Cats`](https://typelevel.org/cats/typeclasses.html#type-classes-in-cats)\n===========================================================================================\n\n[Lesson 01: Covariant vs Contravariant Types](https://github.com/sjbiaga/kittens/blob/main/covariant-1-contravariant/README.md)\n\n  - [Exercise 01.1](https://github.com/sjbiaga/kittens/blob/main/covariant-2-contravariant/README.md#exercise-011)\n\n[Lesson 02: Closures and Stack Safety](https://github.com/sjbiaga/kittens/blob/main/queens-1-native/README.md)\n\n[Lesson 03: A Rich Language of Expressions](https://github.com/sjbiaga/kittens/blob/main/expr-01-trait/README.md)\n\n  - [Exercise 03.1](https://github.com/sjbiaga/kittens/blob/main/expr-CoflatMap/README.md#exercise-031)\n\n  - [Exercise 03.2](https://github.com/sjbiaga/kittens/blob/main/expr-09-ring/README.md#exercise-032)\n\n[Lesson 04: Trampoline and Monads](https://github.com/sjbiaga/kittens/blob/main/queens-3-trampoline/README.md)\n\n  - [Exercise 04.1](https://github.com/sjbiaga/kittens/blob/main/kleisli-2-trampoline/README.md#exercise-041)\n\n[Lesson 05: Monoids](https://github.com/sjbiaga/kittens/blob/main/monoid-1-option/README.md)\n\n[Lesson 06: Natural Transformations](https://github.com/sjbiaga/kittens/blob/main/nat-2-trampoline/README.md)\n\n  - [Exercise 06.1](https://github.com/sjbiaga/kittens/blob/main/expr-simplify/README.md#exercise-061)\n\n  - [Exercise 06.2](https://github.com/sjbiaga/kittens/blob/main/expr-paired/README.md#exercise-062)\n\n  - [Exercise 06.3](https://github.com/sjbiaga/kittens/blob/main/expr-tree/README.md#exercise-063)\n\n  - [Exercise 06.4](https://github.com/sjbiaga/kittens/blob/main/expr-eert/README.md#exercise-064)\n\n  - [Exercise 06.5](https://github.com/sjbiaga/kittens/blob/main/eval-1-function0/README.md#exercise-065)\n\n  - [Exercise 06.6](https://github.com/sjbiaga/kittens/blob/main/eval-2-expr-tree/README.md#exercise-066)\n\n  - [Exercise 06.7](https://github.com/sjbiaga/kittens/blob/main/nat-4-list/README.md#exercise-067)\n\n[Lesson 07: Traversable](https://github.com/sjbiaga/kittens/blob/main/traverse-1-list/README.md)\n\n  - [Exercise 07.1](https://github.com/sjbiaga/kittens/blob/main/traverse-1-list/README.md#exercise-071)\n\n  - [Exercise 07.2](https://github.com/sjbiaga/kittens/blob/main/traverse-3-lazylist/README.md#exercise-072)\n\n  - [Exercise 07.3](https://github.com/sjbiaga/kittens/blob/main/traverse-3-lazylist/README.md#exercise-073)\n\n  - [Exercise 07.4](https://github.com/sjbiaga/kittens/blob/main/traverse-5-set-expr/README.md#exercise-074)\n\n  - [Exercise 07.5](https://github.com/sjbiaga/kittens/blob/main/traverse-6-list/README.md#exercise-075)\n\n  - [Exercise 07.6](https://github.com/sjbiaga/kittens/blob/main/traverse-7-poke/README.md#exercise-076)\n\n[Lesson 08: Monad Transformers](https://github.com/sjbiaga/kittens/blob/main/mt-1-compose/README.md)\n\n  - [Exercise 08.1](https://github.com/sjbiaga/kittens/blob/main/mt-5-ReaderT/README.md#exercise-081)\n\n  - [Exercise 08.2](https://github.com/sjbiaga/kittens/blob/main/mt-6-WriterT/README.md#exercise-082)\n\n  - [Exercise 08.3](https://github.com/sjbiaga/kittens/blob/main/mt-7-StateT/README.md#exercise-083)\n\n  - [Exercise 08.4](https://github.com/sjbiaga/kittens/blob/main/mt-7-StateT/README.md#exercise-084)\n\n  - [Exercise 08.5](https://github.com/sjbiaga/kittens/blob/main/mt-7-StateT/README.md#exercise-085)\n\n  - [Exercise 08.6](https://github.com/sjbiaga/kittens/blob/main/mt-7-StateT/README.md#exercise-086)\n\n  - [Exercise 08.7](https://github.com/sjbiaga/kittens/blob/main/mt-8-ExprT/README.md#exercise-087)\n\n  - [Exercise 08.8](https://github.com/sjbiaga/kittens/blob/main/mt-9-WriterT-Validated/README.md#exercise-088)\n\n[Lesson 09: Recursion](https://github.com/sjbiaga/kittens/blob/main/recursion-1-lambda-calculus/README.md)\n\n  - [Exercise 09.1](https://github.com/sjbiaga/kittens/blob/main/recursion-2-schemes/README.md#exercise-091)\n\n  - [Exercise 09.2](https://github.com/sjbiaga/kittens/blob/main/recursion-2-schemes/README.md#exercise-092)\n\n  - [Exercise 09.3](https://github.com/sjbiaga/kittens/blob/main/recursion-2-schemes/README.md#exercise-093)\n\n  - [Exercise 09.4](https://github.com/sjbiaga/kittens/blob/main/recursion-4-Defer/README.md#exercise-094)\n\nExamples\n========\n\nMake a backup of `~/.dotty_history`, then copy the `.dotty_history` from some lesson, and launch the `REPL`:\n\n    scala-cli repl -S 3.7.3-RC2 --dep org.typelevel::cats-effect:3.6.3                        \\\n                                --dep org.typelevel::cats-core:2.13.0                         \\\n                                --dep org.typelevel::cats-free:2.13.0                         \\\n                                --dep org.typelevel::algebra:2.13.0                           \\\n                                --dep org.scala-lang.modules::scala-parser-combinators:2.4.0\n\nExecute _each_ line from the beginning, in this order.\n\nProjects\n========\n\nEach project is named `kittens` built with `SBT` developed in Scala 3.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsjbiaga%2Fkittens","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsjbiaga%2Fkittens","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsjbiaga%2Fkittens/lists"}