{"id":13616793,"url":"https://github.com/haskell-beginners-2022/course-plan","last_synced_at":"2025-05-16T11:03:58.062Z","repository":{"id":37210426,"uuid":"439911855","full_name":"haskell-beginners-2022/course-plan","owner":"haskell-beginners-2022","description":"📜 Haskell course info, plan, video lectures, slides","archived":false,"fork":false,"pushed_at":"2023-07-09T14:01:05.000Z","size":122,"stargazers_count":1271,"open_issues_count":0,"forks_count":57,"subscribers_count":23,"default_branch":"main","last_synced_at":"2024-10-29T21:01:12.988Z","etag":null,"topics":["beginner-friendly","course","functional-programming","hacktoberfest","hacktoberfest2022","haskell","learning","mentorship"],"latest_commit_sha":null,"homepage":"","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/haskell-beginners-2022.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}},"created_at":"2021-12-19T16:24:32.000Z","updated_at":"2024-10-29T05:45:57.000Z","dependencies_parsed_at":"2024-05-30T04:34:34.971Z","dependency_job_id":"994bcc15-e570-4b0d-81a3-88b8c1d28b70","html_url":"https://github.com/haskell-beginners-2022/course-plan","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/haskell-beginners-2022%2Fcourse-plan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haskell-beginners-2022%2Fcourse-plan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haskell-beginners-2022%2Fcourse-plan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haskell-beginners-2022%2Fcourse-plan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haskell-beginners-2022","download_url":"https://codeload.github.com/haskell-beginners-2022/course-plan/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254518384,"owners_count":22084374,"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":["beginner-friendly","course","functional-programming","hacktoberfest","hacktoberfest2022","haskell","learning","mentorship"],"created_at":"2024-08-01T20:01:33.370Z","updated_at":"2025-05-16T11:03:58.045Z","avatar_url":"https://github.com/haskell-beginners-2022.png","language":"Haskell","funding_links":[],"categories":["Haskell"],"sub_categories":[],"readme":"# course-plan\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"256\" height=\"256\" src=\"https://raw.githubusercontent.com/haskell-beginners-2022/course-plan/main/logo.png\"\u003e\n\u003c/p\u003e\n\nHaskell and Functional Programming course for complete beginners.\n\n\u003e :warning: The course authors no longer provide reviews of the solutions.\n\u003e However, all the learning materials are free and publicly available.\n\u003e You can learn Haskell on your own or with the help of others.\n\nCourse learning materials comprise:\n\n* [🎥 Four 1-hour lectures on YouTube][video]\n* [🖼 Slides][slides]\n* [🧩 Practical exercises and Haskell installation instructions][exercises]\n\n[video]: https://www.youtube.com/watch?v=6MsQcUprO9o\u0026list=PLOJjn67NeYg9cWA4hyIWcxfaeX64pwo1c\u0026ab_channel=chshersh\n[slides]: https://slides.com/haskellbeginners2022\n[exercises]: https://github.com/haskell-beginners-2022/exercises\n\nThe course is entirely free!\n\n\u003chr\u003e\n\nBelow you can find the plan for each individual lecture with the\ncorresponding links to learning materials.\n\n## 🏡 Lecture 1: Fundamentals\n\n* What is Functional Programming?\n* FP concepts\n* Haskell features\n* Haskell toolchain: GHC, GHCi, ghcup, cabal, hls\n* How to install Haskell?\n* GHCi\n  * Arithmetic expressions\n  * Comparison operators\n  * Boolean expressions\n  * Calling functions\n* Types\n  * `:t` command in GHCi\n  * Types of booleans, numbers, and functions\n* Lists and operations with them\n  * Prepending, concatenation\n  * Standard list functions\n  * Ranges\n* Laziness\n* String\n* Syntax constructions\n  * Defining our own functions\n  * packages, modules, imports\n  * `if-then-else`\n  * guards\n  * `let-in`\n  * `where`\n* Immutability\n* Recursion\n* Higher-Order Functions (HOF)\n  * Functions as first-class values\n  * Lambda functions\n  * Partial application\n  * `map`, `filter`, etc.\n\n🎞 Slides: https://slides.com/haskellbeginners2022/lecture-1\n\n📽 Video: [Haskell Beginners 2022: Lecture 1](https://www.youtube.com/watch?v=6MsQcUprO9o)\n\n## 🏗 Lecture 2: Data types\n\n* Pattern-matching\n  * Top level\n  * `case-of`\n  * List patterns\n  * Recursion and pattern matching\n  * Pattern-matching pitfalls\n* Totality\n* Tuples\n* Algebraic Data Types\n  * Product types\n  * Sum types\n* Data types in Haskell\n  * `data`\n  * Simple product types\n  * Records\n  * Enumerations\n  * Simple sum types\n  * Recursive data types\n  * `type`\n  * `newtype`\n* Polymorphism\n  * Parametric polymorphism\n  * Types of standard functions\n  * Hoogle\n  * Polymorphic data types\n  * Standard polymorphic data types\n* Eta-reduction\n* Function composition: dot operator `(.)`\n\n🎞 Slides: https://slides.com/haskellbeginners2022/lecture-2\n\n📽 Video: [Haskell Beginners 2022: Lecture 2](https://www.youtube.com/watch?v=rf-lie7U04Q)\n\n## 🎮 Lecture 3: Typeclasses\n\n* Parametric polymorphism vs Ad-hoc polymorphism\n* Typeclasses\n  * `class`\n  * `instance`\n  * Default methods\n  * `{-# MINIMAL #-}`\n  * Small typeclasses vs Big typeclasses\n* Language Extensions\n  * `{-# LANGUAGE InstanceSigs #-}`\n* Standard typeclasses\n  * `Eq`\n  * Haskell Equality Table\n  * `Ord`\n  * `Num`\n* `deriving`\n  * Stock derivable typeclasses\n  * `{-# LANGUAGE GeneralizedNewtypeDeriving #-}`\n* Algebraic typeclasses\n  * `Semigroup`\n  * `Monoid`\n  * Laws\n* Kinds\n* `Functor`\n* Folds\n  * `foldr`\n  * `foldl`\n  * `foldl'`\n  * `foldr` vs `foldl'`\n  * `Foldable`\n* Strict and Lazy evaluation\n  * Lazy evaluation\n  * Tail Call Optimization (TCO)\n  * Equational reasoning\n  * `{-# LANGUAGE BangPatterns #-}`\n\n🎞 Slides: https://slides.com/haskellbeginners2022/lecture-3\n\n📽 Video: [Haskell Beginners 2022: Lecture 3](https://www.youtube.com/watch?v=Vs-vvlYLtRI)\n\n## 🔈🎤 Lecture 4: Monads and IO\n\n* Monad example\n  * `andThen` for `Maybe`, `Either` and list\n* Monad as programming pattern\n* `Monad`\n  * The typeclass\n  * Instances\n  * Laws\n  * Usage example\n* **FAM**ily: `Functor`, `Applicative`, `Monad`\n* Purity\n* Why Purity + Laziness is a problem for side effects?\n* `IO`\n  * Why does IO require a monad?\n  * `String` vs `IO String`\n  * `getLine`\n  * `putStrLn`\n  * `Main` and `main`\n* _Then_ operator: `\u003e\u003e`\n* `do`-notation\n* Cabal\n  * Packages\n  * `build-depends`\n* Functional Core, Imperative Shell\n\n🎞 Slides: https://slides.com/haskellbeginners2022/lecture-4\n\n📽 Video: [Haskell Beginners 2022: Lecture 4](https://www.youtube.com/watch?v=12D4Y2Hdnhg)\n\n## What's next?\n\nAfter you've finished the course, you may be interested in the\nfollowing resources to continue your FP and Haskell journey:\n\n* [Learn Haskell by building a blog generator](https://lhbg-book.link/):\n  A project-based course that teaches pragmatic Haskell by building a\n  blog generator from scratch.\n* [Haskell in Depth](https://www.manning.com/books/haskell-in-depth):\n  A book about intermediate Haskell topics such as Monad Transformers,\n  metaprogramming, testing, logging, and performance analysis.\n* [Functional Design and Architecture ](https://www.manning.com/books/functional-design-and-architecture):\n  Design patterns and architectures for building production quality\n  applications using functional programming, with examples in Haskell\n  and other FP languages.\n* [Haskell Study Plan](https://github.com/soupi/haskell-study-plan):\n  More links on different topics and examples of real-world Haskell\n  projects.\n* [Awesome List of Haskell mentors](https://github.com/willbasky/Awesome-list-of-Haskell-mentors):\n  A list of Haskell projects and mentors willing to help you master Haskell.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaskell-beginners-2022%2Fcourse-plan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaskell-beginners-2022%2Fcourse-plan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaskell-beginners-2022%2Fcourse-plan/lists"}