{"id":22636148,"url":"https://github.com/47degrees/fp-fundamentals","last_synced_at":"2025-04-11T21:12:01.051Z","repository":{"id":62219707,"uuid":"159090253","full_name":"47degrees/fp-fundamentals","owner":"47degrees","description":null,"archived":false,"fork":false,"pushed_at":"2023-01-17T16:05:10.000Z","size":115,"stargazers_count":13,"open_issues_count":0,"forks_count":4,"subscribers_count":45,"default_branch":"master","last_synced_at":"2025-04-11T21:11:51.709Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/47degrees.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}},"created_at":"2018-11-26T00:55:45.000Z","updated_at":"2023-02-10T06:53:37.000Z","dependencies_parsed_at":"2023-02-10T10:45:26.570Z","dependency_job_id":null,"html_url":"https://github.com/47degrees/fp-fundamentals","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/47degrees%2Ffp-fundamentals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/47degrees%2Ffp-fundamentals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/47degrees%2Ffp-fundamentals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/47degrees%2Ffp-fundamentals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/47degrees","download_url":"https://codeload.github.com/47degrees/fp-fundamentals/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248480431,"owners_count":21110937,"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","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":[],"created_at":"2024-12-09T03:18:30.212Z","updated_at":"2025-04-11T21:12:01.028Z","avatar_url":"https://github.com/47degrees.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FP Fundamentals\n\nAs part of the some FP mentoring sesions we have developed a very simple project (in Scala, Kotlin and Swift) that basically shows how to express the behavior of your program using type classes: `Combinator`,  `Transformer`, `Lifter` and `Flattener`, which are basically a simpler version of `Semigroup`, `Functor`, `Applicative` and `Monad`.\n\n## [Scala3](/scala)\n\n- [Step 0: Foundations](https://github.com/47degrees/fp-fundamentals/pull/5/commits/f468ade5bfecaf04460f71f0e6acdef9ca9aae96)\n- [Step 1: Create data type Maybe](https://github.com/47degrees/fp-fundamentals/pull/5/commits/e5fdb6526e0d69100a04313ea3fc14a1d471b26a)\n- [Step 2: Create type class Combinator](https://github.com/47degrees/fp-fundamentals/pull/5/commits/30cd74b3027d7caa75de74eef779c63fd9462204)\n- [Step 3: Add syntax for Combinator](https://github.com/47degrees/fp-fundamentals/pull/5/commits/627df5dbf8a7d70abb36baf2ebd488ec2a86e1bb)\n- [Step 4: Create type class Transformer (with syntax)](https://github.com/47degrees/fp-fundamentals/pull/5/commits/98ade72620f2c594fae15adb5c7eabb4e4f7e548)\n- [Step 5: Create type class Transformer2](https://github.com/47degrees/fp-fundamentals/pull/5/commits/e372f849f821871192e88fc5d040d768e195aa0a)\n- [Step 6: Create type class Lifter](https://github.com/47degrees/fp-fundamentals/pull/5/commits/76fa52de035dd09ae663a76f31c3e3c86c619553)\n- [Step 7: Create type class Flattener](https://github.com/47degrees/fp-fundamentals/pull/5/commits/e061506c9489e91f32339de14b1ca325ae41a68d)\n- [Step 8: Use monadic structure](https://github.com/47degrees/fp-fundamentals/pull/5/commits/49f53dd4eff5202b881c9427a061455e12224b85)\n- [Step 9: Use Option](https://github.com/47degrees/fp-fundamentals/pull/5/commits/8f708653e5946c153712337c15bbd3166f6cc6ac)\n- [Step 10: Generic F-program](https://github.com/47degrees/fp-fundamentals/pull/5/commits/ac1856cb20f2b0a94e70e58cfece726d4556f712)\n\n## [Scala](/scala)\n\n- [Step 0: Foundations](https://github.com/47degrees/fp-fundamentals/commit/a1eb8385ba2de21ef36b7a9449f3630d5edae321)\n- [Step 1: Create data type Maybe](https://github.com/47degrees/fp-fundamentals/commit/9dc4a6136935ca15c95918f22d4fcac2dbe60f72)\n- [Step 2: Create type class Combinator](https://github.com/47degrees/fp-fundamentals/commit/b81c78d415cc6a77a16f147bc63e79f3c7c23d0c)\n- [Step 3: Add syntax for Combinator](https://github.com/47degrees/fp-fundamentals/commit/197631105a3cc7835ccef9ee08810f6a33fcf4e6)\n- [Step 4: Create type class Transformer (with syntax)](https://github.com/47degrees/fp-fundamentals/commit/d01460ac58347db8a36b53b2586b5a53207fb224)\n- [Step 5: Create type class Transformer2](https://github.com/47degrees/fp-fundamentals/commit/61a04fb37a3e240a67f24ee3e8acbb27bc6640a4)\n- [Step 6: Create type class Lifter](https://github.com/47degrees/fp-fundamentals/commit/dbd48796eefde4cc34608e4bb75352d5886b8f25)\n- [Step 7: Create type class Flattener](https://github.com/47degrees/fp-fundamentals/commit/669762afd543acec6644d33ce5d21af683d3ccf9)\n- [Step 8: Use monadic structure](https://github.com/47degrees/fp-fundamentals/commit/f28342d8e7d0f5df133597ade9304c56e5f9ea82)\n- [Step 9: Use Option](https://github.com/47degrees/fp-fundamentals/commit/df0ede5c5c2b1d3a438247636e9c8008275d81fd)\n- [Step 10: Generic F-program](https://github.com/47degrees/fp-fundamentals/commit/bf542adf83f6443743569ece324be4f3054a0135)\n\n## [Kotlin](/kotlin)\n\n- [Step 0: Foundations](https://github.com/47degrees/fp-fundamentals/commit/2e488604568e615dab1eb2eabdd8f9905f104c1c)\n- [Step 1a: Create data type Maybe](https://github.com/47degrees/fp-fundamentals/commit/1c5aaf6557876e65d8875bdce0c4dc748d1bf29c)\n- [Step 1b: add HKT support to Maybe\\\u003cA\\\u003e](https://github.com/47degrees/fp-fundamentals/commit/bde34ca574b155b8842d9cce75adb7ca6d7d6c29)\n- [Step 2: Create typeclass Combinator](https://github.com/47degrees/fp-fundamentals/commit/0cd4cfc7af5c5252af149e3c3ddafbbe52072c68)\n- [Step 3: Create Transformer type class](https://github.com/47degrees/fp-fundamentals/commit/ce8a7bdd27d42dd6a6ca0994d07e0a5c521b30cf)\n- [Step 4: Create Transformer2 type class](https://github.com/47degrees/fp-fundamentals/commit/d830be70709ba2778b8f65276dd1979b9ee95b50)\n- [Step 5: Create typeclass Lifter](https://github.com/47degrees/fp-fundamentals/commit/80f4aecf301bde8f07665ca2008def7f73286f8c)\n- [Step 6: Create typeclass Flattener](https://github.com/47degrees/fp-fundamentals/commit/b4e4c368ac98b6d8e1de68e0035bba93a620bf84)\n- [Step 7: Use Option](https://github.com/47degrees/fp-fundamentals/commit/fc3922966c1b2a15d70fbba7ce7edad91d3bca4e)\n- [Step 8: Generic F-program](https://github.com/47degrees/fp-fundamentals/commit/53d0b064d6118249540b9dc68f70f1caa0f34678)\n\n# [Swift](/swift)\n\n- [Step 0: Foundations](https://github.com/47degrees/fp-fundamentals/commit/b2f6787b51f40461fd3ca7ee9db2fa70c2624d7a)\n- [Step 1a: Create data type Maybe](https://github.com/47degrees/fp-fundamentals/commit/79ae9a2fcb1dfbd07aa20633bd2ae01581ff2984)\n- [Step 1b: Create data type Maybe with HKT support](https://github.com/47degrees/fp-fundamentals/commit/993bf5c08bd7a1ac7ccd632228525c59eb31883b)\n- [Step 2: Create type class Combinator](https://github.com/47degrees/fp-fundamentals/commit/1a86433c7a413bb76ace893beef1d0de71b16435)\n- [Step 4: Create type class Transformer](https://github.com/47degrees/fp-fundamentals/commit/9a9f9d0813a7e6361bbfc0b1d0d07b5f6e6be6fd)\n- [Step 5: Create type class Transformer2](https://github.com/47degrees/fp-fundamentals/commit/f554259573ea585547ace2c1eb1a4986f8a8e3ce)\n- [Step 6: Create type class Lifter](https://github.com/47degrees/fp-fundamentals/commit/ed48df9b0ef87cd31454ac5c720a4f03e92a9d9d)\n- [Step 7: Create type class Flattener](https://github.com/47degrees/fp-fundamentals/commit/a6b545a4400f4c9ee4a86d3054fbf71a969504da)\n- [Step 9: Use Option](https://github.com/47degrees/fp-fundamentals/commit/aebcf7d8c39f22757199d1e5055cef766418c289)\n- [Step 10: Generic F-program](https://github.com/47degrees/fp-fundamentals/commit/b0d6d8908ff1cba87ef05e5a149c32d4518c5434)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F47degrees%2Ffp-fundamentals","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F47degrees%2Ffp-fundamentals","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F47degrees%2Ffp-fundamentals/lists"}