# Learning Haskell Unfortunately, there is no blessed way to start learning Haskell. Many people have different opinion on this one. And the following is only my sight on the question. It targets people without necessary any Functional Programmin (FP) experience whatsoever. No academic experience required either as well as PhD in anything. ## First Step I would suggest starting with [`Learn4Haskell` free course](https://github.com/kowainik/learn4haskell), (sorry for the shameless plug). It is GitHub based and the main advantage of is that you can get feedback on your work and ask any questions on the way as well. I see lack of mentorship help as a main difficulty when learning a new paradygm. I recommend doing exercises along the way (which are included into the course), but if you are only interested on the strategy/topics in which you should proceed in Haskell, then here is it: * What is Haskell, what are its particularities * Basic Haskell syntax * Functions * Types * Expressions * FP concepts in the language * Immutability * Pattern matching * Recursion * Polymorphism * Laziness * Higher-ordered functions * Partial applications * Eta-reduction * Focus on Types: Type aliases, ADTs, Product types and Records, Sum types and Enumerations, Newtypes * Typeclasses * Kinds. * Three monsters of functional programming: Functor, Applicative, Monad. A broader picture is illustrated here: ![Haskell Knowledge Map](https://kowainik.github.io/images/Haskell_Knowledge_Map.png) *(Related discussion [here](https://www.reddit.com/r/haskell/comments/m5q5sv/haskell_knowledge_map/))* Also you can check [this "Bottom Haskell Pyramid" post](https://gilmi.me/blog/post/2021/03/16/bottom-haskell-pyramid) for the overview of the plan to approach Haskell. ## Other Paths There is also cool project: * [Codeworld](https://code.world/haskell) – To learn Haskell in a funnier game-like way. You can also try start learning on the following books: * [LYAH](http://learnyouahaskell.com/) — it's free and covers basic stuff * Real-world Haskell — the up-to-date version of this book: https://github.com/tssm/up-to-date-real-world-haskell * Get Programming With Haskell, Will Kurt — beginner-friendly explanation of Haskell There are much more, but these are that I like better. ## Next steps I can greatly recommend [the book "Finding Sucess and Failure"](https://joyofhaskell.com/) by Julie Moronuki and Chris Martin. It goes one step further fundamentals and walks you through building a simple project and learning more concepts and Haskell idioms. Additionally, you can check out other resources by [typeclasses](https://typeclasses.com/). They are focused on educational materials. And they also have several more cool books! On the general note, if you want to continue learning more about Haskell and get ready for the real-world Haskell in production, I would suggest reading about the following topics: * State, Reader and Writer monads * IO and `do`-notation * Monad Transformers * Learn more about Haskell build tools * Maybe even lenses (for fun, but they also useful in big applications) That should be enough to be able to write real-word applications :slightly_smiling_face: There are several blog posts on these topics on the internet. Some of them which I know and can suggest: * https://github.com/Gabriel439/post-rfc/blob/master/sotu.md * https://taylor.fausak.me/haskell-knowledge-base/Haskell * https://kowainik.github.io/posts/2019-02-06-style-guide * https://kowainik.github.io/posts/extensions * https://kowainik.github.io/posts/deriving * https://kowainik.github.io/posts/haskell-mini-patterns * https://mmhaskell.com/monads/transformers * https://kowainik.github.io/posts/2018-11-18-state-pattern-matching * https://github.com/kowainik/awesome-cabal * https://kowainik.github.io/posts/2018-06-21-haskell-build-tools * https://schooloffp.co/2020/08/17/whirlwind-tour-of-cabal-for-beginners.html * https://vrom911.github.io/blog/haskell-aliases * https://kodimensional.dev/github-actions * https://vrom911.github.io/blog/write-yourself-a-lens And the resource of links on various Haskell related blogs: [Aelve Blogs List](https://guide.aelve.com/haskell/popular-blogs-dila2lox) If you want to be aware of what is going on in the Haskell community and receive cool stuff with blog posts, libraries, and news weekly, then my advice is [Haskell Weekly](https://haskellweekly.news/). In addition to the above suggestions, I can recommend the following books: * Parallel and Concurrent Programming in Haskell — more advanced topics of concurrency * Functional Design and Architecture — more about designing Haskell programs ## Advanced There are much more to learn. Here are a few cool resources to learn type-level magic: * https://github.com/i-am-tom/haskell-exercises ## Help Also don't hesitate to contact me with any questions – @vrom911 everywhere. And I have copies of all the mentioned books as well ;)