{"id":65633,"url":"https://github.com/fpsvogel/learn-roc","name":"learn-roc","description":"Learning resources for Roc.","projects_count":96,"last_synced_at":"2026-07-08T10:00:27.257Z","repository":{"id":229224490,"uuid":"776166962","full_name":"fpsvogel/learn-roc","owner":"fpsvogel","description":"Learning resources for Roc.","archived":false,"fork":false,"pushed_at":"2025-06-22T18:41:32.000Z","size":78,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-20T11:04:19.887Z","etag":null,"topics":["awesome-list","books","exercises","fp","functional","functional-programming","learning-resources","practice","roc"],"latest_commit_sha":null,"homepage":"","language":null,"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/fpsvogel.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-22T20:19:06.000Z","updated_at":"2025-06-22T18:41:35.000Z","dependencies_parsed_at":"2024-04-19T14:41:15.393Z","dependency_job_id":"31092bb5-4cd0-45cd-b756-c4c2b7324798","html_url":"https://github.com/fpsvogel/learn-roc","commit_stats":null,"previous_names":["fpsvogel/learn-functional-programming","fpsvogel/learn-roc"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fpsvogel/learn-roc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fpsvogel%2Flearn-roc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fpsvogel%2Flearn-roc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fpsvogel%2Flearn-roc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fpsvogel%2Flearn-roc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fpsvogel","download_url":"https://codeload.github.com/fpsvogel/learn-roc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fpsvogel%2Flearn-roc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35260671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"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"}},"created_at":"2024-09-05T00:00:22.118Z","updated_at":"2026-07-08T10:00:27.257Z","primary_language":null,"list_of_lists":false,"displayable":true,"categories":["Projects","Learning","Reference","Haskell","Elixir","Exercises","Roc","Community"],"sub_categories":["Reference","Community","More resources","Courses, etc.","Ruby","Dependent types, type theory","Projects","Exercises","Articles","TypeScript"],"readme":"\u003c!-- omit in toc --\u003e\n# Learn Roc\n\nThis repo used to list resources for several functional programming languages, and [the raw file](https://raw.githubusercontent.com/fpsvogel/learn-functional-programming/main/README.md) still contains commented-out sections for Haskell and Elixir.\n\nBut these days I'm more interested in Roc because it's intentionally small and tries to incorporate some of the strengths of dynamic languages, while being fully statically typed.\n\nIf you notice any broken links here, please let me know by [opening an issue](https://github.com/fpsvogel/learn-functional-programming/issues/new).\n\n\u003c!-- omit in toc --\u003e\n## Table of contents\n\n- [Community](#community)\n- [Learning](#learning)\n- [Reference](#reference)\n- [Exercises](#exercises)\n- [Projects](#projects)\n\n## Community\n\n- [Roc Zulip Chat](https://roc.zulipchat.com/)\n\n## Learning\n\n- [Official tutorial](https://www.roc-lang.org/tutorial)\n- [Introduction to Roc (video)](https://www.youtube.com/watch?v=7R204VUlzGc)\n\n## Reference\n\n- [Examples](https://www.roc-lang.org/examples)\n- Docs: [builtins](https://www.roc-lang.org/builtins), [basic-cli](https://www.roc-lang.org/packages/basic-cli/0.15.0)\n- [Roc Awesome](https://github.com/lukewilliamboswell/roc-awesome?tab=readme-ov-file) for lots more resources\n\n## Exercises\n\n- [Exercism - Roc](https://exercism.org/tracks/roc)\n- [Advent of Code](https://adventofcode.com) with the [platform](https://github.com/ostcar/roc-aoc-platform) or [template](https://github.com/lukewilliamboswell/aoc-template)\n- Advent of Code solutions in Roc:\n  - [github.com/scott2000/advent-of-code-2023](https://github.com/scott2000/advent-of-code-2023)\n  - [github.com/lukewilliamboswell/aoc](https://github.com/lukewilliamboswell/aoc)\n\n## Projects\n\n- Make a game, probably text-based. But if graphical, study these:\n  - [roc-ray](https://github.com/lukewilliamboswell/roc-ray) and examples\n  - [roc-wasm4](https://github.com/lukewilliamboswell/roc-wasm4) and examples\n  - [Roctris](https://github.com/jared-cone/roctris): terminal Tetris clone\n- Make a web app, either from scratch or using one of these frameworks:\n  - [Joy](https://github.com/niclas-ahden/joy)\n  - [Kingfisher](https://github.com/ostcar/kingfisher)\n\n\u003c!--## FP in non-FP languages\n\nBecause my goal in learning FP is not to switch to a different stack, but to become a better programmer in the languages that I use now.\n\n### TypeScript\n\n- FP libraries: [Purify](https://gigobyte.github.io/purify/), [Effect](https://effect.website/), [fp-ts](https://gcanti.github.io/fp-ts/)\n- [TypeScript for Functional Programmers](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes-func.html)\n- [How to Write TypeScript Like a Haskeller](https://serokell.io/blog/typescript-for-haskellers)\n- See also [TypeScript resources in my \"Learn Ruby\" list](https://github.com/fpsvogel/learn-ruby/tree/58a6b4692c42bad14e8e9cead5935f9522a19ddf#typescript)\n\n### Ruby\n\n- \"Functional lite\": prefer immutability and avoid side effects\n  - [Avoid Mutation — Functional Style in Ruby](https://www.rubypigeon.com/posts/avoid-mutation-functional-style-in-ruby/)\n  - [Boundaries](https://www.destroyallsoftware.com/talks/boundaries)\n  - Sandi Metz ([source](https://dev.to/sandimetz/comment/255m)): *\"I only have a small bit of experience with functional languages, so I don't get to have much of an opinion. I can say, however, that immutability and no side-effects are great ideas, and that I've borrowed them for my OO. My initial goal for every new object I write is that it not change, and that it not have side effects. This obviously can't suit every object, but I've been pleasantly surprised about how much can be done under these constraints, and how much the constraints simplify code.\"*\n  - Avdi Grimm ([source](https://web.archive.org/web/20201009182546/https://github.com/yct21/observatory/issues/93)): *\"Functional programming ideas about preferring immutability and isolating interactions with the outside world can help us avoid the worst pitfalls of procedural and object-oriented coding. But trying to program in a 'fully FP' style in Ruby can be like paddling a kayak with a canoe paddle. Upstream. […] Your best bet for effective development is to learn to 'code with the grain' [of the language you're using]. And when you get right down to it, Ruby's grain is object-oriented.\"*\n- Hanami/dry-rb ecosystem\n  - [This blog series by Tim Riley](https://www.icelab.com.au/notes/conversational-rom-rb-part-2-types-associations-and-update-commands) is a good introduction. The linked article is the last one; scroll to the bottom to see a list of all the posts in the series.\n  - Learn the [Hanami](https://hanamirb.org/) framework with [Hanami Mastery](https://hanamimastery.com) and example apps found in GitHub repo searches ([1](https://github.com/search?q=hanami+example+pushed%3A%3E2022-01-01\u0026type=repositories), [2](https://github.com/search?q=hanami+app+pushed%3A%3E2022-01-01\u0026type=repositories), [3](https://github.com/search?q=hanami+application+pushed%3A%3E2022-01-01\u0026type=repositories), [4](https://github.com/search?q=hanami+software+pushed%3A%3E2022-01-01\u0026type=repositories)).\n  - Explore [dry-rb](https://dry-rb.org/) gems. --\u003e\n\n\u003c!-- ## Haskell\n\nBecause it's often recommended for learning FP in its purest form.\n\n### Community\n\n- [Functional Programming Discord server](https://discord.com/invite/K6XHBSh)\n- [Haskell - Community page](https://www.haskell.org/community/)\n\n### Reference\n\n- [Hoogle](https://hoogle.haskell.org/). Since its search uses a query param, you can add a search keyword to your browser to let you quickly search from the address bar, for example `hs partition` would take you to [https://hoogle.haskell.org/?hoogle=partition](https://hoogle.haskell.org/?hoogle=partition)\n\n### Courses, etc.\n\n- [x] [Try Haskell](https://tryhaskell.org)\n- [ ] [Haskell MOOC](https://haskell.mooc.fi/) and exercise solutions ([1](https://github.com/tinfoil-knight/haskell-mooc), [2](https://github.com/mikkom/haskell-mooc/tree/master/exercises), [3](https://github.com/dandax123/haskell-mooc-solutions), [4](https://github.com/bobbrahms/haskell-mooc/tree/master/exercises), [5](https://github.com/Qualia91/haskell-mooc/tree/master/exercises), [6](https://github.com/davide-butera/haskell-mooc/tree/master/exercises), [7](https://github.com/lucastarche/haskell-mooc/tree/master/exercises), [8](https://github.com/shyba/haskell-mooc/tree/master/exercises))\n- [ ] [Well-Typed - Introduction to Haskell](https://teaching.well-typed.com/intro/)\n- [ ] [Wikibooks - Haskell](https://en.wikibooks.org/wiki/Haskell)\n- [ ] [System F - Functional Programming Course](https://github.com/system-f/fp-course#progression) and [exercise solutions](https://github.com/tonymorris/fp-course/tree/master/src/Course)\n- [ ] [What I Wish I Knew When Learning Haskell](https://smunix.github.io/dev.stephendiehl.com/hask/tutorial.pdf) ([Markdown source](https://github.com/sdiehl/wiwinwlh/blob/master/tutorial.md))\n- [ ] [Haskell for Imperative Programmers](https://www.youtube.com/playlist?list=PLe7Ei6viL6jGp1Rfu0dil1JH1SHk9bgDV) (videos)\n- [ ] [Implement With Types, Not Your Brain!](https://reasonablypolymorphic.com/blog/typeholes/)\n- [ ] 💲[Soar with Haskell](https://www.amazon.com/Soar-Haskell-beginners-functional-programming/dp/1805128450)\n- [ ] [thoughtbot - Maybe Haskell: Programming without Null](https://github.com/thoughtbot/maybe_haskell)\n- [ ] [The Haskell Phrasebook](https://typeclasses.com/phrasebook)\n- [ ] [Typeclassopedia](https://wiki.haskell.org/Typeclassopedia)\n- [ ] 💲[Thinking with Types](https://leanpub.com/thinking-with-types)\n- [ ] 💲[Algebra-Driven Design](https://leanpub.com/algebra-driven-design)\n- [ ] 💲[Effective Haskell](https://pragprog.com/titles/rshaskell/effective-haskell/)\n- [ ] 💲[Haskell (almost) Standard Libraries](https://leanpub.com/haskell-stdlibs)\n- [ ] 💲[Haskell in Depth](https://www.manning.com/books/haskell-in-depth)\n- [ ] Explore language extensions\n  - [ ] [GHC User's Guide - Language extensions](https://downloads.haskell.org/ghc/latest/docs/users_guide/exts.html) (current)\n  - [ ] [A Guide to GHC's Extensions (2018)](https://limperg.de/ghc-extensions/)\n  - [ ] [An Opinionated Guide to Haskell in 2018](https://lexi-lambda.github.io/blog/2018/02/10/an-opinionated-guide-to-haskell-in-2018/#any-flavor-you-like)\n  - [x] For records: [my findings](https://github.com/fpsvogel/haskell-mooc/blob/141495e219cb8c48564de7da49ddb55d45830daa/exercises/Set5a.hs#L6-L14) plus [a note on a false compiler warning](https://github.com/fpsvogel/haskell-mooc/blob/141495e219cb8c48564de7da49ddb55d45830daa/exercises/Set5a.hs#L99-L107)\n- [ ] Explore performance optimization\n  - [ ] [StackOverflow answer on intermediate compiler output](https://stackoverflow.com/a/59338472)\n  - [ ] [Doc on debugging the compiler](https://downloads.haskell.org/ghc/latest/docs/users_guide/debugging.html#dumping-out-compiler-intermediate-structures)\n  - [ ] [Doc on code optimization](https://downloads.haskell.org/ghc/latest/docs/users_guide/using-optimisation.html)\n  - [ ] [Haskell Wiki - Performance/GHC](https://wiki.haskell.org/Performance/GHC)\n  - [ ] [FP Complete - Performance section in the Applied Haskell Syllabus](https://tech.fpcomplete.com/haskell/syllabus/#performance)\n  - [ ] \"Core\" and \"Asm\" views in [Haskell Playground](https://play.haskell.org/saved/w9UU3xLx), plus more options in [godbolt](https://godbolt.org/)\n\n### Exercises\n\n- [ ] [Exercism - Haskell](https://exercism.org/tracks/haskell)\n- [ ] [hw-koans](https://github.com/haskell-works/hw-koans)\n- [ ] [Advent of Code](https://adventofcode.com) and Haskell solutions: [1](https://github.com/RossPaterson/advent-of-code), [2](https://github.com/glguy/advent), [3](https://github.com/Javran/advent-of-code/tree/master/src/Javran/AdventOfCode), [4](https://github.com/yarrick/advent), [5](https://github.com/Prillan/adventofcode-solutions), [6](https://github.com/Sheinxy/Advent-Of-Code), [7](https://github.com/slotThe/advent)\n  - Haskell templates for Advent of Code: [1](https://github.com/mstksg/advent-of-code-dev), [2](https://github.com/Martinsos/aoc-2023-haskell-template), [3](https://github.com/samcoy3/advent-of-code-template), [4](https://github.com/lsmor/template-advent-of-code), [5](https://github.com/pabloariasal/advent-of-code-2021-haskell), [6](https://github.com/ambroslins/AdventOfCode), [7](https://github.com/bereal/AdventOfCodeHaskell)\n- [ ] [HackerRank - Functional Programming track](https://www.hackerrank.com/domains/fp)\n- [ ] [nested-map-reduce-traversal challenge](https://github.com/josevalim/nested-map-reduce-traversal) ([discussion](https://discourse.haskell.org/t/beautiful-functional-programming/7411), [Haskell solutions](https://github.com/josevalim/nested-map-reduce-traversal/tree/master/haskell), more Haskell solutions: [1](https://gist.github.com/TristanCacqueray/fc8fb5cbba7a0391341e73b80a90b2e8), [2](https://gist.github.com/goldfirere/ed1450872afd324ed656e2807b8dfcc0), [3](https://github.com/danielc777888/toy-problems/blob/main/nested-map-reduce-traversal/Recursion.hs), [4](https://gist.github.com/lazamar/305e8808f8975258f6acea4d20fd3405))\n- [ ] [snake-fury](https://github.com/lsmor/snake-fury)\n\n### Projects\n\n- [ ] Make a text-based game.\n  - Guides:\n    - [ ] \u003chttp://jackkelly.name/blog/archives/2022/05/28/text-mode_games_as_first_haskell_projects/index.html\u003e\n    - [ ] \u003chttps://medium.com/codex/developing-a-video-game-in-haskell-e8259050e4dc\u003e\n    - [ ] \u003chttps://whatthefunctional.wordpress.com/2018/03/07/making-a-text-adventure-in-haskell-part-1/#comments\u003e\n    - [ ] \u003chttps://www.youtube.com/watch?app=desktop\u0026v=WLYN7sUDm7Y\u003e\n    - [ ] \u003chttps://haskell-via-sokoban.nomeata.de/\u003e\n  - Examples:\n    - \"Haskell Program to Play the Blackjack Card Game\" in [Haskell Tutorial and Cookbook](https://markwatson.com/opencontent/haskell-cookbook.pdf)\n    - \u003chttps://codereview.stackexchange.com/questions/159069/haskell-text-adventure-game\u003e\n    - \u003chttps://github.com/emanuelfakh/Game_Haskell\u003e\n    - \u003chttps://github.com/rklyne/haskell-text-adventure\u003e\n    - \u003chttps://github.com/jensdanb/Pong2\u003e\n    - \u003chttps://github.com/jasonstolaruk/CurryMUD\u003e\n    - \u003chttps://github.com/Qqwy/haskell-snek\u003e\n  - See also the Haskell Wiki pages [Game Development](https://wiki.haskell.org/Game_Development) and [Applications and libraries/Games](https://wiki.haskell.org/Applications_and_libraries/Games)\n\n### Articles\n\n- [ ] [Haskell mini-patterns handbook](https://kowainik.github.io/posts/haskell-mini-patterns)\n- [ ] [Competitive programming in Haskell](https://byorgey.github.io/blog/). See also [CPHaskell](https://github.com/anurudhp/CPHaskell).\n- [ ] [The Power of Tiny DSLs](http://jackkelly.name/blog/archives/2020/04/03/the_power_of_tiny_dsls)\n- [ ] [The IO Monad for People who Simply Don't Care](http://blog.sigfpe.com/2007/11/io-monad-for-people-who-simply-dont.html)\n- [ ] [All About Strictness](https://tech.fpcomplete.com/blog/2017/09/all-about-strictness/)\n- [ ] [Make invalid states unrepresentable](http://h2.jaguarpaw.co.uk/posts/make-invalid-laziness-unrepresentable/) and [related discussion](https://www.reddit.com/r/haskell/comments/zz87px/comment/j2ic1lk/)\n\n### Dependent types, type theory\n\nI probably won't get into this, but I'm saving these just in case.\n\n- [ ] [Liquid Haskell](https://www.tweag.io/blog/2022-01-19-why-liquid-haskell/)\n- [ ] [Idris docs](https://idris2.readthedocs.io/en/latest/tutorial/index.html)\n- [ ] 💲[Type-Driven Development with Idris](https://www.manning.com/books/type-driven-development-with-idris)\n- [ ] [Agda Wiki](https://wiki.portal.chalmers.se/agda/pmwiki.php)\n- [ ] [agda2hs](https://agda.github.io/agda2hs/)\n- [ ] [Learn You an Agda](http://learnyouanagda.liamoc.net/pages/introduction.html)\n- [ ] 💲[Verified Functional Programming in Agda](https://dl.acm.org/doi/book/10.1145/2841316)\n- [ ] [Programming Language Foundations in Agda](https://plfa.github.io/)\n- [ ] 💲[Types and Programming Languages](https://www.cis.upenn.edu/~bcpierce/tapl/)\n\n### More resources\n\n- [awesome-learning-haskell](https://github.com/tweag/awesome-learning-haskell)\n- [\"Resources\" section in The Haskell Guide](https://haskell-docs.netlify.app/resources/resources/)\n- [Haskell Books](https://www.extrema.is/articles/haskell-books)\n- [Haskell - Documentation (books, courses, etc.)](https://www.haskell.org/documentation/) --\u003e\n\n\u003c!-- ## Elixir\n\nBecause it's a different take on FP: less pure and with unique advantages offered by the BEAM platform. (But these advantages are not yet completely realized, i.e. it's a work in progress, according to the talk [The Soul of Erlang \u0026 Elixir](https://www.youtube.com/watch?v=JvBT4XBdoUE).)\n\n### Community\n\n- [Elixir Status](https://elixirstatus.com/)\n\n### Courses, etc.\n\n- [ ] [Elixir School](https://elixirschool.com/en)\n- [ ] [DockYard Academy curriculum](https://github.com/DockYard-Academy/curriculum)\n- [ ] 💲[Elixir for Programmers](https://codestool.coding-gnome.com/courses/elixir-for-programmers-2)\n- [ ] 💲[From Ruby to Elixir](https://pragprog.com/titles/sbelixir/from-ruby-to-elixir)\n- [ ] 💲[Phoenix on Rails](https://phoenixonrails.com/) ($10 discount code [here](https://elixirforum.com/t/phoenix-for-rails-developers/54624/18))\n- [ ] 💲[Elixir in Action](https://www.manning.com/books/elixir-in-action)\n\n### Exercises\n\n- [ ] [Elixir Koans](https://github.com/elixirkoans/elixir-koans)\n- [ ] [Exercism - Elixir](https://exercism.org/tracks/elixir)\n\n### Projects\n\n- [ ] Build a [SpaceTraders](https://spacetraders.io/) Phoenix app\n\n### More resources\n\n- [\"Learning\" page on the Elixir site](https://elixir-lang.org/learning.html) --\u003e\n","projects_url":"https://awesome.ecosyste.ms/api/v1/lists/fpsvogel%2Flearn-roc/projects"}