haskell-intro
haskell-intro copied to clipboard
Seven classes on Haskell and a follow-up reading list
... and a simple, straightforward way to read a CSV file.
Classes
About classes. This is a curated introduction to Haskell by Yuras Shumovich as studied by Evgeniy and Zarak.
We were lucky to have Yuras as a tutor in Haskell for this small course at the end of 2018. Yuras knows 150% of Haskell, but he adjusted instruction according to our prior knowledge (or, rather, ignorance).
Set up GHCi. Set up GHCi Haskell on your computer or use a limited web version as suggested here.
Topic list. Yuras original topic list, a great plan to learn.
Sessions. This repository holds session transcripts class 1-7
closely following the topics list from above.
Reading
Readings about Haskell are quite numerous. Good lists are here and here.
Top picks
-
The topic list, again.
-
Google Haskell 101 and 102 has two presentations that talk about Haskell from scratch. Their approach about teaching Functor, Applicative and Monad via
fmap
,ap
,bind
is simple and effective. -
Prelude
module holds basic functions and worth studying on its own. You can can get type declarations of Prelude by typing:browse Prelude
in intepreter or check this command output here. Examples ofPrelude
usage are included in A Tour of the Haskell Prelude. -
Bartosz Milewski's 'Category Theory for Programmers' is a great intro to Haskell itself, written in very good technical language and rolled at a very readable pace. It is a top trending repository on Github. Note also this playlist (not related to the book).
Quick introductions
-
Haskell Concepts in One Sentence luckily corresponds to our topics list! (cached and reclassified here)
-
Skim a cheatsheet for terminology.
-
Is Rust functional - yes, the article has simple Haskell counterexamples for Rust.
-
Short and very clean introductory blog by Will Yager.
-
Haskell Basics from Write You A Haskell.
-
learnxinyminutes on Haskell - it is very minimal indeed.
-
A dense Haskell learning material for the brave by Yann Esposito explicitly separates concepts by difficulty and suggests good learning path (beware the
nix
installation part, you do not have to do that, there is stack and Haskell platform).
Functional programming terminology
-
A Glossary of Functional Programming by John De Goes.
-
Functional Programming Jargon by Hemanth HM (with examples in JavaScript).
Longer reads
New
Easier
Tougher
- What I Wish I Knew When Learning Haskell is truely a long read, but you can definitely spot parts you'll like.
- RWH - Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen is a usual suggestion to read after LYAH (above). It was front endge in 2008, but probably not as current know. The text layout is also quite 2008.
- Tae Sandoval is doing an update of RWH!
- Two recent good books from Manning publishing house:
Paid content
- Programming in Haskell by Graham Hutton, has sample chapters and a set of slides and videos
- For haskellbook.com by Christopher Allen and Julie Moronuki one can examine the excercises on github.
Study recommendations
- Getting started with Haskell mentions resources above and lays you a learning path for years ahead.
- How to learn Haskell is 'a list of recommendations from one of the authors of the Haskell Book', it is translated to many languages.
- FP-Course-ITMO is both a course and learning path suggestions, in English.
- Haskell Study Plan
- How to Learn Haskell, an artefact of study program from spring semester 2010 at Washington University in St. Louis, part of broader Adventures in Functional Programming Haskell & Scheme.
- A fast growing haskell-learning list.
Build tools
- 'Haskell at work' has an introduction to cabal
- Juan Pedro Villa Isaza blog provides a walk through a minimal cabal file.
- An introduction to
cabal
andstack
at @kowainik - Lesson 35. Building projects with stack
Specific topics
- Functions by tutorial by Carl Burch, the only addition could have been lambda functions
- Desugarization (list comp desugarss to do notation)
- Pronounceable names for operators
Type system
- Typeclassopedia is a classic article about types classes. At first glance one needs to spot functors, applicatives and monads.
- In cartoons
- Don't read the monad tutorials
- Effectful Haskell: IO, Monads, Functors - a monadic tutorial that 'clicks'.
- Эффекты в Haskell - in Russian, I like the monad classification and a table at the end of an article.
- Thinking with types by Sandy Maguire - first chapters are free and are good intro to types in general, before going int dependent types later in the book. Has code repo by the author here.
- Lambda the Ultimate Pattern Factory by Thomas Mahler relates software design patterns to Haskell type classes, a larger study that makes step forward in SOLID principles in functional settings discussion (see also here). You are getting a good fresh angle on Typeclassopedia.
- What we talk about when we talk about monads by Tomas Petricek. Review of formal definitions, angles of interpretation (eg container or chained computation) and even sociology of monads - what motivates people to talk about them (mentoins the ivory tower and rite of passage). Shows good and wrong paths of use, very well-written, easy and rewarding to read.
Advanced
- Graham Hutton, Erik Meijer. Monadic Parsing in Haskell (with comments)
- Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire
- A List of Foundational Haskell Papers
Motivational
- Simon Peyton-Jones, one of language creators. Escape from the ivory tower: the Haskell journey video. Funny graphs about adoption curves of programming languages starting here:
I want to give you a little bit of detail how it is like to be language designer.
Courses
English
- Zero BS Haskell
- Tsoding
- Phrasebook has a neat interface, but a bit too much emphasis on metaphores from other programming languages (eg replicating loops, variables).
- Stepik course notes in English by Igal Tabachnik
Russian
- Stepik course by Denis Moskvin is very good content and the presentation is nice and caring to students.
- FP at ITMO
- YouTube and code of seminars at CMC MSU
Problem sets
Things to watch
- Boring/Inclusive/"Developper"/Simple vs Fancy/Elitist/"Researcher" Haskell
Feedback
Issues for this Github repo: https://github.com/epogrebnyak/haskell-intro/issues
Twitter: https://twitter.com/PogrebnyakE/status/1082306102468005891