{"id":13616980,"url":"https://github.com/kowainik/learn4haskell","last_synced_at":"2025-05-15T11:06:17.949Z","repository":{"id":38191039,"uuid":"298783215","full_name":"kowainik/learn4haskell","owner":"kowainik","description":"👩‍🏫 👨‍🏫 Learn Haskell basics in 4 pull requests","archived":false,"fork":false,"pushed_at":"2024-06-28T18:49:09.000Z","size":945,"stargazers_count":1023,"open_issues_count":35,"forks_count":849,"subscribers_count":24,"default_branch":"main","last_synced_at":"2025-05-15T11:06:16.652Z","etag":null,"topics":["hacktoberfest","hacktoberfest2020","hacktoberfest2021","haskell","learning-by-doing"],"latest_commit_sha":null,"homepage":"https://kowainik.github.io/projects/learn4haskell","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kowainik.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"ko_fi":"kowainik","github":["vrom911"]}},"created_at":"2020-09-26T09:44:33.000Z","updated_at":"2025-05-08T10:48:21.000Z","dependencies_parsed_at":"2024-01-14T06:04:06.511Z","dependency_job_id":"a1f2e592-6a9e-4d15-9656-bf5eff53dfc5","html_url":"https://github.com/kowainik/learn4haskell","commit_stats":{"total_commits":78,"total_committers":30,"mean_commits":2.6,"dds":0.7307692307692308,"last_synced_commit":"cfc69fa36399c44a6885f3981a18f0fae4e51caf"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Flearn4haskell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Flearn4haskell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Flearn4haskell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Flearn4haskell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kowainik","download_url":"https://codeload.github.com/kowainik/learn4haskell/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254328385,"owners_count":22052632,"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":["hacktoberfest","hacktoberfest2020","hacktoberfest2021","haskell","learning-by-doing"],"created_at":"2024-08-01T20:01:35.521Z","updated_at":"2025-05-15T11:06:17.931Z","avatar_url":"https://github.com/kowainik.png","language":"Haskell","funding_links":["https://ko-fi.com/kowainik","https://github.com/sponsors/vrom911"],"categories":["Haskell"],"sub_categories":[],"readme":"# learn4haskell\n\n![Learn4Haskell](/images/HacktoberFest2021-Learn4Haskell-Banner.png)\n\n🚨 __Important notice: This course continues BAU even after Hacktoberfest__ 🚨\n\nYou can find the results of Hacktoberfest 2020 for [Learn4Haskell](https://github.com/kowainik/learn4haskell) in the following blog post:\n\n * [Brave New Hacktoberfest](https://kowainik.github.io/posts/hacktoberfest2020)\n\n\u003chr\u003e\n\nIt's the time of the year when thousand pull requests are starting to float in\nthe air like a leaf on the wind 🍃\n\nIt's Hacktoberfest! And we are happy to be part of this fantastic event.\n\nUsually, people contribute to projects within the communities they spend most of their time\nalready and don't try to go out of those boundaries.\nBut why not use this time to learn something challenging, something fresh,\nsomething that you never had time for?\n\nYou can get the benefits of Hacktoberfest while learning something new\nfascinating concepts – Functional Programming with Haskell.\n\nAnd we're here to help!\n\n* 4 Pull Request to get the T-Shirt or plant a tree as stands in the Hacktoberfest rules.\n* 4 Pull Request to learn to program in Haskell.\n* 4 Pull Request to blow your mind.\n\n## Table of Contents\n\n * [What is Learn4Haskell](#what-is-learn4haskell)\n    * [Course Plan](#course-plan)\n * [Goals](#goals)\n * [Who can participate](#who-can-participate)\n * [What you will get from this course](#what-you-will-get-from-this-course)\n * [How to get started](#how-to-get-started)\n    * [Installing Haskell](#installing-haskell)\n    * [Haskell IDE](#haskell-ide)\n    * [How to develop](#how-to-develop)\n * [Who we are](#who-we-are)\n * [How can you help](#how-can-you-help)\n\n## What is Learn4Haskell\n\nLearn4Haskell is a GitHub-located course that will get you into the Haskell\nFunctional Programming world in just 4 Pull Requests.\n\nThis course is organised as a coding project. So you can complete\nthe course without needing to exit your editor.\n\nThis works in the following way. When you decide to start the project, all you\nneed to do is to fork the project. We have prepared 4 separate modules — chapters.\nEach part contains educational material and lots of examples that we provide in\na simple form that doesn't require you to know anything about functional programming beforehand.\nAlso, each chapter contains several exercises on everything that is\nexplained by us. You can solve the tasks on your way and at the end open a PR to\nyour fork with this chapter's solution and summon us (by shouting out our\nnicknames there). We would be happy to give you feedback on your progress,\nexplain problematic concepts or just support you mentally!\n\nEach chapter contains unique information and covers different topics. We suggest\ngoing through them in order. However, if you think that some of the chapters\nare already familiar to you, feel free to skip onto the next one.\nIf you would like to talk to us, you can even rely on PRs for the chapter you\nhave questions about.\n\nChapters are stuffed with information but are aimed to be completed\nwithout additional resources. You may spend an evening per chapter, but we swear\nit's worth it!\n\nAt the end of the course, you should be able to independently create and read\nbasic Haskell code and understand Monads and other famous concepts of Functional\nProgramming.\n\n### Course Plan\n\nHere is a more concrete plan of the mystical 4 Chapters we prepared for\nyou. These are the highlights of each part.\n\n* __Chapter One__ – What is Haskell, what are its particularities, basic Haskell\n  syntax, functions, types, expressions.\n* __Chapter Two__ – FP concepts in the language, immutability, pattern matching,\n  recursion, polymorphism, laziness, Higher-ordered functions, partial\n  applications, eta-reduction.\n* __Chapter Three__ – Focus on Types. Type aliases, ADTs, Product types and\n  Records, Sum types and Enumerations, Newtypes, Typeclasses.\n* __Chapter Four__ – Kinds. Three monsters of functional programming: Functor, Applicative,\n  Monad.\n\n## Goals\n\nWe created the Learn4Haskell project in pursuit of the following goals:\n\n* Help others to learn Haskell\n* Give a beginner-friendly and self-consistent course with theory and practice\n  in the same place\n* Explain Haskell topics before each task, but strive to be concise and useful\n  at the same time. It's a tough balance!\n* Help people who want to participate in Hacktoberfest and Open-Source, but also\n  want to learn new things during this process\n* Provide review and feedback on solutions, so people are never alone in this\n  challenging yet exciting journey!\n* Give people who completed this course all the necessary understandings to\n  be able to work with basic projects that use standard features. We also intend\n  that you have a strong basis on what they should do to be able to continue their functional programming\n  studies.\n\n## Who can participate\n\nEveryone!\n\nWe welcome everyone and would be happy to assist you in this journey!\n\nThe course is intended for people who don't know Haskell or know only language\nbasics, though.\n\nIf you are already an experienced Haskell developer and have come here for learning\nadvanced topics, this course might not be that for you. But you still can help us!\nYour feedback and suggestions would be helpful for us as well as for the\nlanguage newcomers who decide to work with this course.\n\n## What you will get from this course\n\nThis course has many benefits upon completion. Check them out to be sure that it fits\nyour expectations!\n\nParticipation in this course would give you:\n\n * 4 Pull Requests required for Hacktoberfest completion\n * Basic knowledge of the most functional programming language\n * Understanding of the functional programming concepts that you would be able to use in your\n   day-to-day life afterwards\n * On-the-fly feedback and help from experienced Haskell developers and educators\n * Interesting challenges\n * Fun!\n\nHonestly, this seems like a pretty rad deal!\n\n## How to get started\n\nStarting to learn Haskell with Learn4Haskell is a piece of cake!\n\n1. [Fork this repository](https://docs.github.com/en/free-pro-team@latest/github/getting-started-with-github/fork-a-repo).\n2. :warning: Add the `hacktoberfest` topic to your fork. Otherwise, [your PRs won't count](https://hacktoberfest.digitalocean.com/hacktoberfest-update).\n3. Enable GitHub Actions for your forked repository.\n    * Visit: https://github.com/\u003cYOUR_GITHUB_USERNAME\u003e/learn4haskell/actions\n4. [Install the Haskell compiler](#installing-haskell).\n5. Open the `src/Chapter1.hs` file, and start learning and solving tasks!\n6. After you finish the first chapter (or any other chapter, or even if you are\n   stuck in the middle), open\n   [Pull Request](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)\n   __to your fork__ with the solution and mention @vrom911 and I\n   would be on our way for the review.\n\n \u003e Note, that you should open a PR for your fork of this repo, not this repo.\n \u003e Everyone has their solutions to the included tasks, and they don't mix together\n \u003e well in one repo 🙂\n\n\u003e However, if you find some bugs or problems in this repo, you can\n\u003e open a PR to Learn4Haskell directly. We appreciate any help and feedback!\n\nLearn4Haskell has 4 chapters that you can walk through and submit 4 pull requests to\ncomplete the Hacktoberfest event (or just for knowledge and your enjoyment).\n\nSo, you can start right now with forking. Following this we'll describe how you can\ninstall all the necessary items to be able to run this course locally.\n\n### Installing Haskell\n\nIf you're on Windows, install the `haskell-dev` and `make` packages [using Chocolatey](https://chocolatey.org/install).\n\n```shell\nchoco install haskell-dev make\nrefreshenv\n```\n\nIf you're on Linux or macOS, then the process is easy:\n\n1. Install [ghcup](https://www.haskell.org/ghcup/) and follow `ghcup`\n   instructions for successful installation (remember to restart your terminal afterwards to avoid an `unknown ghcup command` error on the next step).\n2. Install the latest version of the Haskell compiler — GHC — and the\n   [Cabal](https://www.haskell.org/cabal/) build tool. After you install\n   `ghcup`, it is easy to install the rest with a few commands from your\n   terminal\n\n    ```shell\n    ghcup install ghc 9.2.4\n    ghcup set ghc 9.2.4\n    ghcup install cabal 3.2.0.0\n    ```\n3. Run `cabal update` to fetch the latest info about Haskell packages.\n\n### Haskell IDE\n\nIf you don't have any IDE preferences, we recommend installing\n[Visual Studio Code](https://code.visualstudio.com/download) with the\n[Haskell plugin](https://marketplace.visualstudio.com/items?itemName=haskell.haskell).\nThe mentioned plugin would give you everything required to immediately start coding with Haskell.\n\n### Gitpod\n\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/kowainik/learn4haskell)\n\n[Gitpod](https://www.gitpod.io/) is a VSCode-based Web IDE.\nWith it, you can get a Haskell environment out-of-the-box.\nIt's free to use up to 50 hours per month.\n\nJust prepend `gitpod.io#` to your repo URL and you are ready to go.\nIt will take some time to initialize the workspace for the first time it opens.\nIt only keeps changes under `/workspace`, and it will be deleted after a period of inactivity unless it's pinned.\n\n### How to develop\n\nThe course assumes that you install Haskell tooling (GHC and Cabal), edit code\nin the corresponding chapters, run GHCi (Haskell interpreter, explained in the\ncourse) from the root of this project and load your chapters to check your code.\nDon't worry, each chapter explains all the needed information!\n\nWe also provide a Makefile with commands to test your solutions locally with the included\nprepared test-suite. We have also configured the CI using GitHub\nActions on Learn4Haskell to check your answers at GitHub automatically!\n\nTo run all tests for Chapter One:\n\n```shell\nmake test-chapter1\n```\n\nTo run tests only for basic tasks for Chapter One (without the advanced tasks):\n\n```shell\nmake test-chapter1-basic\n```\n\nSimilar commands are provided for all chapters from One to Four.\n\n## Who we are\n\nI am [Veronika (@vrom911)](https://vrom911.github.io/) and I drive this open source organisation —\n[Kowainik](https://kowainik.github.io/). We have a lot of open source projects\nand libraries in Haskell that are used in the Haskell community. We are also\nworking on a lot of tutorials and guides in Haskell and mentoring people who are\nkeen to learn Haskell as well.\n\nWe are passionate about Functional Programming and Haskell in particular. But at\nthe same time, we understand how difficult it can be to get into all these\nideas on your own. That is why we've decided to start this course to help\nnewcomers. With the interactive learning process and live discussions we've included, Haskell\nwill not be that scary. We will do our best so that it especially won't be the case\nfor you or any others participating here!\n\n## How can you help\n\nYou can help us by supporting us on Ko-Fi or via GitHub sponsorship program:\n\n* [Kowainik Ko-Fi](https://ko-fi.com/kowainik)\n* [Veronika Romashkina via GitHub](https://github.com/sponsors/vrom911)\n\n\nWe also appreciate any feedback on our course a lot! You can submit your\nfeedback using the following form:\n* [Feedback Form](https://docs.google.com/forms/d/e/1FAIpQLScBVhLxq5CgGnAfIGUE-fCoOUqeGkDY2HXzbT7KV2jjLOsmjQ/viewform)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkowainik%2Flearn4haskell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkowainik%2Flearn4haskell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkowainik%2Flearn4haskell/lists"}