└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Awesome Haskell articles/talks for beginners 2 | 3 | A curated list of amazingly awesome Haskell articles and talks for beginners. 4 | 5 | If you think a article/talk should be added, please create a new issue. 6 | 7 | - [Learning Haskell](https://wiki.haskell.org/Learning_Haskell) - places where you can go if you want to learn Haskell 8 | - [How to learn Haskell](https://github.com/bitemyapp/learnhaskell) - a recommended path for learning Haskell based on experience helping others 9 | - [A list of Haskell articles on good design, good testing](https://williamyaoh.com/posts/2019-11-24-design-and-testing-articles.html) 10 | - [Software Design and Architecture in Haskell](https://github.com/graninas/software-design-in-haskell/) - set of materials on how to build real-world applications in Haskell 11 | - [A Glossary of Functional Programming](http://degoes.net/articles/fp-glossary) 12 | - [The Haskell Cheatsheet](http://cheatsheet.codeslower.com) - references for syntax, concepts and advanced types 13 | 14 | ## Motivation 15 | 16 | - [You are already smart enough to write Haskell](https://williamyaoh.com/posts/2019-10-05-you-are-already-smart-enough.html) 17 | - [State of the Haskell ecosystem](https://github.com/Gabriel439/post-rfc/blob/master/sotu.md) - the current state of the Haskell ecosystem 18 | - [Why Functional Programming Matters](https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf) 19 | 20 | ## Base 21 | 22 | - [What I Wish I Knew When Learning Haskell](http://dev.stephendiehl.com/hask) 23 | - [Learn You a Haskell: A community version](https://learnyouahaskell.github.io/) - a complete introductory to intermediate guide on learning Haskell focused on beginners (an open-source community maintained version) 24 | - [An opinionated guide to Haskell in 2018](https://lexi-lambda.github.io/blog/2018/02/10/an-opinionated-guide-to-haskell-in-2018/) - overview of a few select parts of the Haskell workflow and the ecosystem 25 | - [Arrows Zoo](https://kowainik.github.io/posts/arrows-zoo) - overview of the arrow syntax 26 | - [Foo to Bar: Naming Conventions in Haskell](https://kowainik.github.io/posts/naming-conventions) 27 | - [Fix(ity) me](https://kowainik.github.io/posts/fixity) - terminology and functionality around operator usages 28 | - :speaker: [Data61 fp-course](https://www.youtube.com/watch?v=NzIZzvbplSM&list=PLly9WMAVMrayYo2c-1E_rIRwBXG_FbLBW) - Functional Programming Course 29 | - [Typeclassopedia](https://wiki.haskell.org/Typeclassopedia) - a starting point for the student of Haskell wishing to gain a firm grasp of its standard type classes 30 | - [Functors, Applicatives, And Monads In Pictures](http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html) 31 | - [The wizard monoid](http://www.haskellforall.com/2018/02/the-wizard-monoid.html) 32 | - [Phantom type](https://wiki.haskell.org/Phantom_type) 33 | - [Strategic Deriving](https://kowainik.github.io/posts/deriving) - overview of the deriving mechanism 34 | - [Parse, don’t validate](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/) - parse inputs -> create types -> ruling out invalid states 35 | 36 | ## Advanced 37 | 38 | - [Haskell programming tips](https://wiki.haskell.org/Haskell_programming_tips) - several examples of how code can be improved 39 | - [Haskell Style Guide](https://kowainik.github.io/posts/2019-02-06-style-guide) - a collection of best-practices inspired by commercial and free open source Haskell libraries and applications 40 | - [Generalized algebraic data types](https://en.wikibooks.org/wiki/Haskell/GADT) - learn why GADTs are useful and how to declare your own 41 | - [Introduction to Tagless Final](https://serokell.io/blog/tagless-final) - an introduction to tagless final encoding 42 | - [Contravariant functors are Weird](https://sanj.ink/posts/2020-06-13-contravariant-functors-are-weird.html) 43 | - :speaker: [Video series by Richard Eisenberg](https://www.youtube.com/playlist?list=PLyzwHTVJlRc9QcF_tdqc9RdxJED8Mvyh1) - share some brain-bending code, debug in public, and generally provide flashes of insight 44 | 45 | ## Packages 46 | 47 | - [Demystifying MonadBaseControl](https://lexi-lambda.github.io/blog/2019/09/07/demystifying-monadbasecontrol) - provide a complete survey of MonadBaseControl - how it works, how it’s designed, and how it can go wrong 48 | - [containers: Maps, Sets, and more](https://www.fpcomplete.com/haskell/library/containers/) - implementation of some of the most commonly used containers used in programming 49 | 50 | ### Monad Transformers 51 | 52 | - [A Gentle Introduction to Monad Transformers](https://two-wrongs.com/a-gentle-introduction-to-monad-transformers) 53 | - :speaker: [Next Level MTL - George Wilson - BFPG 2016-06](https://www.youtube.com/watch?v=GZPup5Iuaqw) 54 | - [The State Monad: A Tutorial for the Confused?](http://brandon.si/code/the-state-monad-a-tutorial-for-the-confused/) 55 | - [State monad comes to help sequential pattern matching](https://kowainik.github.io/posts/2018-11-18-state-pattern-matching) - combine monadic effects of StateT and Either to parse a list of values 56 | - [Effectful Haskell: Reader, Transformers, Typeclasses](https://slpopejoy.github.io/posts/Effectful02.html) 57 | 58 | ## Design Patterns 59 | 60 | - [Haskell Design Patterns: The Handle Pattern](https://jaspervdj.be/posts/2018-03-08-handle-pattern.html) 61 | - [Comonadic builders](https://kodimensional.dev/posts/2019-03-25-comonadic-builders) - Implement the Builder programming pattern using Comonad 62 | - [Designing Testable Components](http://felixmulder.com/writing/2019/10/05/Designing-testable-components.html) 63 | - [Functional architecture is Ports and Adapters](https://blog.ploeh.dk/2016/03/18/functional-architecture-is-ports-and-adapters/) - Ports are your IO code and sit at the edge of the system. The core consist of pure functions. 64 | - [The ReaderT Design Pattern](https://www.fpcomplete.com/blog/2017/06/readert-design-pattern) - large-scale application or library application design architecture 65 | - [Three Layer Haskell Cake](https://www.parsonsmatt.org/2018/03/22/three_layer_haskell_cake.html) - application design architecture with roughly three layers 66 | - [holmusk/three-layer](https://github.com/Holmusk/three-layer) - Architecture of the Haskell web applications 67 | 68 | ## Algorithm 69 | 70 | - [JSON Parsing from Scratch in Haskell](https://abhinavsarkar.net/posts/json-parsing-from-scratch-in-haskell/) - Write a json parser from scratch 71 | - [JSON Parsing from Scratch in Haskell: Error Reporting—Part 1](https://abhinavsarkar.net/posts/json-parsing-from-scratch-in-haskell-2/) - Tracking position with text zipper 72 | - [Fast Sudoku Solver in Haskell #1: A Simple Solution](https://abhinavsarkar.net/posts/fast-sudoku-solver-in-haskell-1/) 73 | 74 | ## Examples 75 | 76 | - [kowainik/issue-wanted](https://github.com/kowainik/issue-wanted) - web application follows _Three Layer Cake_ architecture pattern 77 | - [GSoC 2019 - Building A Web Application with Haskell](https://rashadg1030.github.io/rashad-blog/6.html) 78 | - [Guide to Implementing Custom Monadic Effects in Issue-Wanted](https://rashadg1030.github.io/rashad-blog/7.html) 79 | 80 | ## Testing 81 | 82 | - [An example of state-based testing in Haskell](https://blog.ploeh.dk/2019/03/11/an-example-of-state-based-testing-in-haskell/) - ... with the State monad 83 | - [Mocking Effects using Constraints and Phantom Data Kinds](https://chrispenner.ca/posts/mock-effects-with-data-kinds) - writing multiple 'interpreters' for your monad stacks using mtl-style constraints 84 | 85 | ## Libraries 86 | 87 | ### Servant 88 | 89 | - [Servant's type-level domain specific language](https://bradparker.com/content/posts/2019-10-05-servant-types.html) 90 | 91 | --------------------------------------------------------------------------------