{"id":13682793,"url":"https://github.com/lemastero/scala_typeclassopedia","last_synced_at":"2026-01-25T18:13:21.370Z","repository":{"id":17638002,"uuid":"82393438","full_name":"lemastero/scala_typeclassopedia","owner":"lemastero","description":"Abstractions from Category theory with simple description \u0026 implementation, links to further resources.","archived":false,"fork":false,"pushed_at":"2024-12-05T15:51:43.000Z","size":1789,"stargazers_count":381,"open_issues_count":33,"forks_count":39,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-04-30T09:51:35.554Z","etag":null,"topics":["category-teory","functional-programming","patterns","scala"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-sa-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lemastero.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2017-02-18T14:48:40.000Z","updated_at":"2025-03-10T10:54:16.000Z","dependencies_parsed_at":"2023-11-07T04:56:58.533Z","dependency_job_id":"c9c19a00-bef9-4b6d-ba56-54feafbc82a5","html_url":"https://github.com/lemastero/scala_typeclassopedia","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lemastero/scala_typeclassopedia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemastero%2Fscala_typeclassopedia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemastero%2Fscala_typeclassopedia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemastero%2Fscala_typeclassopedia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemastero%2Fscala_typeclassopedia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lemastero","download_url":"https://codeload.github.com/lemastero/scala_typeclassopedia/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemastero%2Fscala_typeclassopedia/sbom","scorecard":{"id":583826,"data":{"date":"2025-08-11","repo":{"name":"github.com/lemastero/scala_typeclassopedia","commit":"d609b5b48e17272c83ba2108a9efd2278a82c6d4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5,"checks":[{"name":"Code-Review","score":7,"reason":"Found 21/30 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/scala.yml:10","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scala.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/lemastero/scala_typeclassopedia/scala.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scala.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/lemastero/scala_typeclassopedia/scala.yml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Creative Commons Attribution Share Alike 4.0 International: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T19:54:02.895Z","repository_id":17638002,"created_at":"2025-08-20T19:54:02.895Z","updated_at":"2025-08-20T19:54:02.895Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28756433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T16:32:25.380Z","status":"ssl_error","status_checked_at":"2026-01-25T16:32:09.189Z","response_time":113,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["category-teory","functional-programming","patterns","scala"],"created_at":"2024-08-02T13:01:53.276Z","updated_at":"2026-01-25T18:13:21.365Z","avatar_url":"https://github.com/lemastero.png","language":"Scala","funding_links":[],"categories":["Scala"],"sub_categories":[],"readme":"[![Scala CI](https://github.com/lemastero/scala_typeclassopedia/actions/workflows/scala.yml/badge.svg?branch=main)](https://github.com/lemastero/scala_typeclassopedia/actions/workflows/scala.yml?query=branch%3Amain)\n[![Scala Steward badge](https://img.shields.io/badge/Scala_Steward-helping-brightgreen.svg?style=flat\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAVFBMVEUAAACHjojlOy5NWlrKzcYRKjGFjIbp293YycuLa3pYY2LSqql4f3pCUFTgSjNodYRmcXUsPD/NTTbjRS+2jomhgnzNc223cGvZS0HaSD0XLjbaSjElhIr+AAAAAXRSTlMAQObYZgAAAHlJREFUCNdNyosOwyAIhWHAQS1Vt7a77/3fcxxdmv0xwmckutAR1nkm4ggbyEcg/wWmlGLDAA3oL50xi6fk5ffZ3E2E3QfZDCcCN2YtbEWZt+Drc6u6rlqv7Uk0LdKqqr5rk2UCRXOk0vmQKGfc94nOJyQjouF9H/wCc9gECEYfONoAAAAASUVORK5CYII=)](https://github.com/scala-steward-org/scala-steward)\n\n# Scala typeclassopedia\n\n```mermaid\nclassDiagram\n   Functor~F~ \u003c|-- Apply~F~\n   Apply \u003c|-- FlatMap~F~\n   Functor \u003c|-- Traverse~F~\n   Foldable~F~ \u003c|-- Traverse\n   FlatMap~F~ \u003c|-- Monad~F~\n   Apply~F~ \u003c|-- Applicative~F~\n   Apply \u003c|-- CoflatMap~F~\n   CoflatMap \u003c|-- Comonad~F~\n   Applicative \u003c|-- Selective~F~\n   Selective \u003c|-- Monad\n   Applicative \u003c|-- Alternative~F~\n   MonoidK~F~ \u003c|-- Alternative\n   Applicative \u003c|-- ApplicativeError~F~\n   ApplicativeError \u003c|-- MonadError~F~\n   Monad \u003c|-- MonadError\n   Monad \u003c|-- Bimonad~F~\n   Comonad \u003c|-- Bimonad\n\n   class Functor {\n     ) map(F[A], A =\u003e B): F[B]\n   }\n   class Foldable {\n     ) foldLeft(F[A], B, Tuple2[B,A] =\u003e B): B\n   }\n   class Traverse {\n     ) traverse(F[A], A =\u003e G[B]): G[F[B]]\n   }\n   class Apply {\n     ) ap(F[A], F[A =\u003e B]): F[B]\n     ) map2(Tuple2[A,B] =\u003e C, F[A], F[B]): F[C]\n   }\n   class Applicative {\n     ) pure(A): F[A]\n   }\n   class Selective {\n     ) select(F[Either[A,B]], F[A=\u003eB]): F[B]\n   }\n   class FlatMap {\n     ) flatmap(F[A], A =\u003e F[B]): F[B]\n   }\n   class Monad {\n     ) flatten(F[F[A]]): F[A]\n   }\n   class ApplicativeError {\n     ) raiseError(E): F[A]\n   }\n   class CoflatMap {\n     ) extend(F[A], F[A] =\u003e B): F[B]\n   }\n   class Comonad {\n     ) extract(W[A]): A\n   }\n   class MonoidK {\n     ) empty(): F[A]\n     ) combine(F[A], F[A]): F[A]\n   }\n   class Alternative {\n     ) some(F[A]): F[NonEmptyList[A]]\n     ) many(F[A]): F[List[A]]\n   }\n```\n\n* Base abstractions: [Functor](./BasicAbstractions.md#functor-covariant-functor), [Apply](./BasicAbstractions.md#apply), [Applicative](./BasicAbstractions.md#applicative-applicative-functor), [Monad](./BasicAbstractions.md#monad), [Contravariant](./Contravariant.md#contravariant-contravariant-functor), [Comonad](./Comonads.md#comonad), [Foldable](./BasicAbstractions.md#foldable), [Bifunctor](./Bifunctors.md#bifunctor), [Arrow](./Profunctors.md#arrow), [Coyoneda](./KanExtensions.md#coyoneda)\n\n* Covariant Functors: [Functor](./BasicAbstractions.md#functor-covariant-functor), [Apply](./BasicAbstractions.md#apply), [Applicative](./BasicAbstractions.md#applicative-applicative-functor), [Selective](./BasicAbstractions.md#selective-selective-applicative-functors)\n\n* [Monads](./BasicAbstractions.md#monad): [Reader](./BasicAbstractions.md#reader), [Writer](./BasicAbstractions.md#writer), [State](./BasicAbstractions.md#state), [RWS Monad](./BasicAbstractions.md#rws-monad), [Update Monad](./BasicAbstractions.md#update-monad), [Logic Monad, Prompt Monad, Failure Monad](./BasicAbstractions.md#logic-monad-prompt-monad-failure-monad), [ContT (Continuation Monad)](./BasicAbstractions.md#contt-continuation-monad), [Reverse State Monad](./BasicAbstractions.md#reverse-state-monad), [Tardis (Bidirectional State Monad)](./BasicAbstractions.md#tardis-bidirectional-state-monad), [Chronicle Monad](./BasicAbstractions.md#chronicle-monad), [Bimonad](./BasicAbstractions.md#bimonad), [Dijkstra monad](./BasicAbstractions.md#dijkstra-monad), [Hoare Monad](./BasicAbstractions.md#hoare-monad)\n\n* Monads generalizations: [Indexed Monads](./BasicAbstractions.md#indexed-monads), [SuperMonads](./BasicAbstractions.md#supermonads)\n\n* [IO related monads](./BasicAbstractions.md#io-related-monads): [IO](./BasicAbstractions.md#io-monad), [Bifunctor IO (BIO)](./BasicAbstractions.md#bifunctor-io-bio), [RIO Monad (Reader + IO)](./BasicAbstractions.md#rio-monad-reader--io), [TRIO (RIO Monad + Bifunctor IO)](./BasicAbstractions.md#trio-rio-monad--bifunctor-io)\n\n* Contravariant functors: [Contravariant](./Contravariant.md#contravariant-contravariant-functor), [Divide (Contravariant Apply)](./Contravariant.md#divide-contravariant-apply), [Divisible (Contravariant Applicative)](./Contravariant.md#divisible-contravariant-applicative)\n\n* Contravariant Adjuctions \u0026 Representable: [Contravariant Adjunction](./Contravariant.md#contravariant-adjunction), [Contravariant Rep](./Contravariant.md#contravariant-rep)\n\n* [Contravariant Kan Extensions](./Contravariant.md#contravariant-kan-extensions): [Contravariant Yoneda](./Contravariant.md#contravariant-yoneda), [Contravariant Coyoneda](./Contravariant.md#contravariant-coyoneda), [Contravariant Day](./Contravariant.md#contravariant-day), [Invariant Day](./Contravariant.md#invariant-day)\n\n* Invariant Functors: [Invariant (Invariant Functor, Exponential Functor)](./BasicAbstractions.md#invariant-invariant-functor-exponential-functor), [Invariant Day](./HigherKinded.md#invariant-day)\n\n```mermaid\nclassDiagram\n   Bifoldable~P[+_,+_]~ \u003c|-- Bitraverse~P[+_,+_]~\n   Bifunctor~P[+_,+_]~ \u003c|-- Bitraverse\n   Bifunctor \u003c|-- Biapply~P[+_,+_]~\n   Biapply \u003c|-- Biapplicative~P[+_,+_]~\n   Functor~F[+_]~ \u003c|-- Bifunctor\n   Functor \u003c|-- Bifunctor\n   Functor \u003c|-- Profunctor~P[-_,+_]~\n   Bifunctor \u003c|-- Zivariant~Z[-_,+_,+_]~\n   Profunctor \u003c|-- Zivariant\n\n  class Functor {\n    ) map(F[A], A =\u003e B): F[B]\n  }\n  class Profunctor {\n    ) dimap(AA =\u003e A, B =\u003e BB): P[A,B] =\u003e P[AA,BB]\n  }\n  class Bifunctor {\n    ) bimap(A =\u003e AA, B =\u003e BB): P[A,B] =\u003e P[AA,BB]\n  }\n  class Bifoldable {\n    ) bifoldLeft(F[A,B], C, (C,A) =\u003e C, (C,B) =\u003e C): C\n  }\n  class Bitraverse {\n    ) bitraverse[G: Applicative](F[A,B], A=\u003eG[C], B =\u003e G[D]): G[F[C,D]]\n  }\n  class Biapply {\n    ) biApply(F[A,B], F[A=\u003eAA,B=\u003eBB]): F[AA,BB]\n  }\n  class Biapplicative {\n    ) bipure(a: A, b: B): F[A,B]\n  }\n  class Zivariant {\n    ) zimap(AA =\u003e A, B =\u003e BB, C =\u003e CC): P[A,B,C] =\u003e P[AA,BB,CC]\n  }\n```\n\n* Bifunctors: [Bifunctor](./Bifunctors.md#bifunctor), [Join](./Bifunctors.md#bifunctor-join), [Wrap](./Bifunctors.md#bifunctor-wrap), [Flip](./Bifunctors.md#bifunctor-flip), [Joker](./Bifunctors.md#bifunctor-joker), [Clown](./Bifunctors.md#bifunctor-clown), [Product](./Bifunctors.md#bifunctor-product), [Bifunctor Sum](./Bifunctors.md#bifunctor-sum), [Bifunctor Tannen](./Bifunctors.md#bifunctor-tannen), [Bifunctor Biff](./Bifunctors.md#bifunctor-biff), [Bitraverse](./Bifunctors.md#bitraverse), [Bifoldable](./Bifunctors.md#bifoldable),\n\n* Comonads: [Comonad](./Comonads.md#comonad), [Coreader (Env comonad, Product comonad)](./Comonads.md#coreader-env-comonad-product-comonad), [Cowriter](./Comonads.md#cowriter), [Cofree](./Free.md#cofree), [Cokleisli](./Comonads.md#cokleisli), [Bimonad](./Comonads.md#bimonad)\n\n* Traversing Folding Filtering: [Monoid](./AbstractAlgebra.md#monoid), [Foldable](./BasicAbstractions.md#foldable), [Traverse](./BasicAbstractions.md#traverse), [Bitraverse](./BasicAbstractions.md#bitraverse), [Bifoldable](./BasicAbstractions.md#bifoldable), [FunctorFilter](./BasicAbstractions.md#functorfilter), [TraverseFilter](./BasicAbstractions.md#traversefilter), [Distributive](./BasicAbstractions.md#distributive), [Cofree Traverse](./Free.md#cofree-traverse)\n\n* Monads not compose - solutions: [Monad Transformers](./BasicAbstractions.md#monad-transformers-optiont-eithert-readert), [Free Monads](./Free.md#free-monads), Tagless Final, [Extensible effects](./BasicAbstractions.md#extensible-effects)\n\n* [Free constructions](./Free.md#free-constructions), [Free Applicative](./Free.md#free-applicative), [Free Monads](./Free.md#free-monads), [Cofree](./Free.md#cofree), [Free Alternative](./Free.md#free-alternative), [Free Arrow](./Free.md#free-arrow), [Free Monad transformers](./Free.md#free-monad-transformers), [Cofree Traverse](./Free.md#cofree-traverse)\n \n* [Representable \u0026 Adjunctions](./Adjunction.md#representable--adjunctions): [Representable](./Adjunction.md#representable), [Corepresentable](./Adjunction.md#corepresentable), [Adjunction](./Adjunction.md#adjunction), [Adjoint Triples](./Adjunction.md#adjoint-triples)\n\n```mermaid\nclassDiagram\n   Ran~G[_], H[_], A~ \u003c|-- Yoneda~H[_], A~\n   Lan~G[_], H[_], A~ \u003c|-- CoYoneda~H[_], A~\n   Ran \u003c|-- Codensity~G[_], A~\n   Lan \u003c|-- Density~G[_], A~\n\n  class Ran {\n    // Right Kan Extension\n    ) run[B](A =\u003e G[B]): H[B]\n  }\n  class Yoneda {\n    ) run[B](A =\u003e B): H[R]\n  }\n  class Codensity {\n    ) run[B](A =\u003e G[B]): G[B]\n  }\n  class Lan {\n    // Left Kan Extension\n    fz: H[Z]\n    run: G[Z] =\u003e A\n  }\n  class CoYoneda {\n    fz: H[Z]\n    run: Z =\u003e A\n  }\n  class Density {\n    fz: G[Z]\n    run: G[Z] =\u003e A\n  }\n  class Day~G[_], H[_], A~ {\n    // Day convolution\n    gb: G[Z]\n    hb: H[X]\n    ) run: (Z,X) =\u003e A\n  }\n```\n\n* [(Co)Yoneda \u0026 (Co)Density \u0026 Kan Extensions](./KanExtensions.md#coyoneda--codensity--kan-extensions), [Yoneda](./KanExtensions.md#yoneda), [Coyoneda](./KanExtensions.md#coyoneda), [Right Kan extension](./KanExtensions.md#right-kan-extension), [Left Kan Extension](./KanExtensions.md#left-kan-extension), [Density Comonad](./KanExtensions.md#density-comonad), [Codensity](./KanExtensions.md#codensity), [Day Convolution](./KanExtensions.md#day-convolution)\n\n* Profunctors: [Profunctor](./Profunctors.md#profunctor), [Star](./Profunctors.md#star), [CoStar](./Profunctors.md#costar), [Strong Profunctor](./Profunctors.md#strong-profunctor), [Tambara](./Profunctors.md#tambara), [Choice Profunctor](./Profunctors.md#choice-profunctor), [Extranatural Transformation](./Profunctors.md#extranatural-transformation), [Profunctor Functor](./Profunctors.md#profunctor-functor), [Profunctor Monad](./Profunctors.md#profunctor-monad), [Profunctor Comonad](./Profunctors.md#profunctor-comonad), [Procompose](./Profunctors.md#procompose),  [ProductProfunctor](./Profunctors.md#roductprofunctor), [SumProfunctor](./Profunctors.md#sumprofunctor)\n\n* Profunctor Adjuctions \u0026 Representable: [Profunctor Adjunction](./Profunctors.md#profunctor-adjunction), [Profunctor Rep](./Profunctors.md#profunctor-rep)\n\n* Profunctor Kan Extensions: [Profunctor Yoneda](./Profunctors.md#profunctor-yoneda), [Profunctor CoYoneda](./Profunctors.md#profunctor-coyoneda), [Profunctor Ran](./Profunctors.md#profunctor-ran), [Profunctor Codensity](./Profunctors.md#profunctor-codensity)\n\n```mermaid\nclassDiagram\n   Functor~F[+_]~ \u003c|-- Bifunctor~F[+_,+_]~\n   Functor \u003c|-- Bifunctor\n   Functor \u003c|-- Profunctor~F[-_,+_]~\n   Contravariant~F[-_]~ \u003c|-- Profunctor\n   Semicategory~F[-_,+_]~ \u003c|-- Category~F[-_,+_]~\n   Category \u003c|-- Arrow~F[-_,+_]~\n   Bifunctor \u003c|-- Zivariant~F[-_,+_,+_]~\n   Profunctor \u003c|-- Zivariant\n   Profunctor \u003c|-- Strong~F[-_,+_]~\n   Strong -- Arrow\n   Arrow \u003c|-- ArrowApply~F[-_,+_]~\n   Arrow \u003c|-- CommutativeArrow~F[-_,+_]~\n   Arrow \u003c|-- ArrowLoop~F[-_,+_]~\n   Profunctor \u003c|-- Choice~F[-_,+_]~\n   Arrow \u003c|-- ArrowZero~F[-_,+_]~\n   Arrow \u003c|-- ArrowChoice~F[-_,+_]~\n   Choice \u003c|-- ArrowChoice\n\n   class Functor {\n     ) map(F[A], A =\u003e B): F[B]\n   }\n   class Contravariant {\n     ) contramap(F[A], B =\u003e A): F[B]\n   }\n   class Semicategory {\n     ) compose[A,B,C](F[B,C], F[A,B]): F[A,C]\n   }\n  class Category {\n    ) id[A]: F[A,A]\n  }\n  class Profunctor {\n    ) dimap(AA =\u003e A, B =\u003e BB): P[A,B] =\u003e P[AA,BB]\n  }\n  class Bifunctor {\n    ) bimap(A =\u003e AA, B =\u003e BB): P[A,B] =\u003e P[AA,BB]\n  }\n  class Zivariant {\n    ) zimap(AA =\u003e A, B =\u003e BB, C =\u003e CC): P[A,B,C] =\u003e P[AA,BB,CC]\n  }\n  class Strong {\n    ) first(P[A,B]): P[(A,C), (B,C)]\n  }\n  class Choice {\n    ) left(P[A,B]): P[Either[A, C], Either[B, C]]\n  }\n  class Arrow {\n    ) arr(A =\u003e B): F[A, B]\n  }\n  class ArrowZero {\n    ) zeroArr(): P[A,B]\n  }\n  class ArrowApply {\n    ) app(P[P[B,C],B]): C\n  }\n  class ArrowApply {\n    ) app(P[P[B,C],B]): C\n  }\n  class ArrowLoop {\n    ) loop(P[(B,D), (C,D)]: P[B,C]\n  }\n```\n\n* [Arrows](./Profunctors.md#arrows): [Category](./Profunctors.md#category), [Arrow](./Profunctors.md#arrow), [Commutative Arrow](./Profunctors.md#commutativearrow), [Arrow Choice](./Profunctors.md#arrow-choice), [Arrow Apply, Arrow Monad](./Profunctors.md#arrow-apply-arrow-monad), [Arrow Loop](./Profunctors.md#arrow-loop), [Arrow Zero](./Profunctors.md#arrow-zero), [Free Arrow](./Free.md#free-arrow), [Kleisli](./Profunctors.md#kleisli), [Cokleisli](./Profunctors.md#cokleisli), [BiArrow](./Profunctors.md#biarrow), [BiKleisli](./Profunctors.md#bikleisli)\n\n* [Cayley representations](./BasicAbstractions.md#cayley-representations): [Difference Lists](./BasicAbstractions.md#difference-lists), [Codensity](./KanExtensions.md#codensity), [Double Cayley Representation](./BasicAbstractions.md#double-cayley-representation)\n\n* [Curry-Howard Isomorphism](./Limits.md#adt-algebra-of-types): [These](./Limits.md#These)\n\n| Types         | Logic                | Category Theory       | Homotopy Theory   |\n|---------------|----------------------|-----------------------|-------------------|\n| [Void](./Limits.md#void)          | false                | initial object        | empty space       |\n| [Unit](./Limits.md#unit)          | true                 | terminal object       | singleton         |\n| [Sum (Coproduct)](./Limits.md#sum-coproduct) Eiter[A,B]    | A v B disjunction    | coproduct             | coproduct space   |\n| [Product](./Limits.md#product) (A,B)          | A ∧ B conjunction    | product               | product space     |\n| A =\u003e B        | A =\u003e B implication   | exponential object    | singleton         |\n| A =\u003e Void     | negation             | exp. obj. into initial obj. |            |\n\n* Higher kinded \u0026 exotic abstractions: [Natural transformation (FunctionK)](./HigherKinded.md#natural-transformation-functionk), [Monoidal Category, Monoid Object](./HigherKinded.md#monoidal-categories-monoid-object), [Cartesian Closed Category](./HigherKinded.md#cartesian-closed-category), [Day Convolution](./HigherKinded.md#day-convolution), [Functor Functor (FFunctor)](./HigherKinded.md#functor-functor-ffunctor), [Monad morphisms](./HigherKinded.md#monad-morphisms), [higher kinded category theory](./HigherKinded.md#higher-kinded-category-theory), [SemigroupK (Plus)](./BasicAbstractions.md#semigroupk-plus), [MonoidK (PlusEmpty)](./BasicAbstractions.md#monoidk-plusempty), [Dinatural Transformation](./Profunctors.md#dinatural-transformation), [Ends \u0026 Coends](./Profunctors.md#ends--coends), [Align](./BasicAbstractions.md#align), [Task](./BasicAbstractions.md#andrey-mokhov-task), [Transducers](./BasicAbstractions.md#transducers), [Relative monads](./BasicAbstractions.md#relative-monads), [Disintegrate](./BasicAbstractions.md#disintegrate)\n\n* Limits: [Cone](./Limits.md#cone), [Cocone](./Limits.md#cocone), [Diagonal Functor](./Limits.md#diagonal-functor), [Limit](./Limits.md#limit), [Colimit](./Limits.md#colimit), [Ends \u0026 Coends](./Profunctors#ends--coends)\n\n* Topoi: Subobject classifier, [Topos](./Topos.md#topos)\n\n* [Other Encodings of Category Theory](./OtherEncodingsOfCT.md): [data-category by Sjoerd Visscher](./OtherEncodingsOfCT.md#encoding-of-category-theory-by-sjoerd-visscher), [Formalizations of Category Theory in proof assistants (Coq)](./OtherEncodingsOfCT.md#formalizations-of-category-theory-in-proof-assistants)\n\n* [Recursion schemas](RecursionSchemas.md)\n\n* [Optics](./Optics.md)\n\n* [Functor Oriented Programming](/BasicAbstractions.md#functor-oriented-programming)\n\n## Resources covering topics about FP and category theory in great details:\n\n* [\"Red Book\" - Functional Programming in Scala - Paul Chiusano and Rúnar Bjarnason](https://www.manning.com/books/functional-programming-in-scala) Best book about FP in Scala. I have bought it for myself and higly recommend it. Worth reading, doing exercises and re-reading.\n* [Category Theory for Programmers - Bartosz Milewski](https://www.blurb.com/b/9621951-category-theory-for-programmers-new-edition-hardco) the best book about this subject. [Blog posts](https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/) and video lectures [Part 1](https://www.youtube.com/playlist?list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_), [Part II](https://www.youtube.com/playlist?list=PLbgaMIhjbmElia1eCEZNvsVscFef9m0dm), [Part III](https://www.youtube.com/playlist?list=PLbgaMIhjbmElia1eCEZNvsVscFef9m0dm)\n* (Haskell) [Typeclassopedia](https://wiki.haskell.org/Typeclassopedia) wiki in Haskell about abstractions from category theory used by Haskell programmers - excellent resource.\n* Agda formalizations: [1Lab](https://1lab.dev/#category-theory), [agda-unimath](https://github.com/UniMath/agda-unimath/tree/master/src/category-theory), [agda/cubical](https://github.com/agda/cubical/tree/master/Cubical/Categories), [agda/agda-categories](https://github.com/agda/agda-categories)\n* [Seven Sketches in Compositionality: An Invitation to Applied Category Theory - Brendan Fong, David I Spivak]() book about Applied Category Theory branch of mathematics that use mathematics from category theory and apply it in different subjects like engineering. The [video lectures](https://www.youtube.com/playlist?list=PLhgq-BqyZ7i5lOqOqqRiS0U5SwTmPpHQ5) based on the book by the authors.\n* (Haskell) Haskell libraries containing abstractions from category theory written by Edward Kmett:\n  [Profunctors](https://hackage.haskell.org/package/profunctors/docs/Data-Profunctor.html), [Bifunctors](https://hackage.haskell.org/package/bifunctors), [Comonad](https://hackage.haskell.org/package/comonad), [free](https://hackage.haskell.org/package/free), [adjunctions](https://hackage.haskell.org/package/adjunctions), [Kan extensions](https://hackage.haskell.org/package/kan-extensions), [invariant](https://hackage.haskell.org/package/invariant), [distributive](https://hackage.haskell.org/package/distributive), [transformers](https://hackage.haskell.org/package/transformers), [semigroupoids](https://hackage.haskell.org/package/semigroupoids). This is how all of this was started :) Some of them were already moved into Haskell standard library e.g. [Data.Functor.Contravariant](https://hackage.haskell.org/package/base/docs/Data-Functor-Contravariant.html)\n* [zio-prelude](https://github.com/zio/zio-prelude) modern look at abstractions from category theory, more modular and expressive\n* (Idris) [statebox/idris-ct](https://github.com/statebox/idris-ct) encoding of abstractions \u0026 formal verification in Idris 2\n* Functional Structures in Scala - Michael Pilquist [(video playlist)](https://www.youtube.com/watch?v=Dsd4pc99FSY\u0026list=PLFrwDVdSrYE6dy14XCmUtRAJuhCxuzJp0): workshop on [implementating FP constructions](https://github.com/mpilquist/Structures) with usage examples and great insights about Scala and FP.\n* Applied functional type theory - Sergei Winitzki [(video playlist)](https://www.youtube.com/watch?v=0Ld79Lnzx_o\u0026list=PLcoadSpY7rHXJWbUkjQ3P9MXBbXxLP8kV)\n* Series of blog posts by Eugene Yokota (@eed3si9n): [herding cats](http://eed3si9n.com/herding-cats/) and [learning Scalaz](http://eed3si9n.com/learning-scalaz/) Easy to understand examples, clear explanations, many insights from Haskell papers and literature.\n* [Examples in scalaz repository](https://github.com/scalaz/scalaz/tree/series/7.3.x/example/src/main/scala/scalaz/example) Learning Scalaz is probably the best documentation for Scalaz.\n* [Documentation for Cats](https://typelevel.org/cats/) (runnable online version for older Cats version on [ScalaExercises](https://www.scala-exercises.org/cats)), [summary](https://typelevel.org/cats/nomenclature.html)\n* [channingwalton/typeclassopedia](https://github.com/channingwalton/typeclassopedia) implementation of Haskell Typeclassopedia by Channing Walton, [(blog post)](http://channingwalton.github.io/typeclassopedia/)\n* Notes on Category Theory in Scala 3 (Dotty) - Juan Pablo Romero Méndez [(blog post)](https://typista.org/categories-in-dotty/#1-categories)\n* Scala Type-class Hierarchy - Tony Morris [(blog post)](http://blog.tmorris.net/posts/scala-type-class-hierarchy/index.html) (traits for all cathegory theory constructions with exotic ones like `ComonadHoist`)\n\n[Computational trinitarianism resources](ComputationalTrinitarianism.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flemastero%2Fscala_typeclassopedia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flemastero%2Fscala_typeclassopedia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flemastero%2Fscala_typeclassopedia/lists"}