Skip to content

Instantly share code, notes, and snippets.

@jhrr
Forked from bitemyapp/gist:8739525
Created May 8, 2014 13:57
Show Gist options
  • Save jhrr/a21519ccda7d6e34cc70 to your computer and use it in GitHub Desktop.
Save jhrr/a21519ccda7d6e34cc70 to your computer and use it in GitHub Desktop.

This is my recommended path for learning Haskell.

Something to keep in mind: don't sweat the stuff you don't understand immediately. Just keep moving.

Primary course

Installing Haskell

Ubuntu PPA

This PPA is excellent and what I use on all my Linux dev and build machines: http://launchpad.net/~hvr/+archive/ghc

Binary distribution (for Mac OS X and non-Ubuntu/Debian Linux distributions)

Download the latest binary distributions for cabal and ghc:

GHC

http://www.haskell.org/ghc/

Cabal

https://www.haskell.org/cabal/download.html

Windows

Either Haskell Platform (if you'll need stuff that compiles in dependencies for things like OpenGL) or the aforementioned binary distribution.

Yorgey course (this is the primary way I recommend being introduced to Haskell)

http://www.seas.upenn.edu/~cis194/lectures.html Brent Yorgey's course is the best I've found so far and replaces both Yann Esposito's HF&H and the NICTA course. This course is particularly valuable as it will not only equip you to write Haskell but also help you understand parser combinators.

Exercises for practice

You should do Yorgey's course before attempting this: https://github.com/NICTA/course/

Secondary material, references

LYAH and Real World Haskell (Thanks bos!) are available online.

I recommend RWH as a reference (thick book). The chapters for parsing and monads are great for getting a sense for where monads are useful. Other people have said that they've liked it a lot. Perhaps a good follow-up for practical idioms after you've got the essentials of Haskell down?

For learning some common typeclasses

Useful for understanding typeclasses in general but also some Hask-specific category theory: http://www.haskell.org/haskellwiki/Typeclassopedia

Search code by type signature

The Hoogle search engine can search by type:

http://www.haskell.org/hoogle/?hoogle=%28a+-%3E+b%29+-%3E+%5ba%5d+-%3E+%5bb%5d

Alternately:

https://www.fpcomplete.com/hoogle

Also Hayoo (which has all of hackage enabled for search by default): http://holumbus.fh-wedel.de/hayoo/hayoo.html

Fun Stuff

After you're comfortable with Haskell, strongly consider learning Lenses and Prisms, even if just as a "user". You don't need to understand the underlying category for it to be useful.

Seen here: http://hackage.haskell.org/package/lens

Frontend/JavaScript

If you need JavaScript, you probably want Purescript for generating JS. Purescript not strictly Haskell but it is very similar and quite pleasant.

Parallelism/Concurrency

This book by Simon Marlow is probably the best I've ever read on the topics of Parallelism and Concurrency: http://chimera.labs.oreilly.com/books/1230000000929

http://www.haskell.org/haskellwiki/Functional_Reactive_Programming

Recursion Schemes

Some of the crazy *-morphism words you've heard are actually about recursion. NB - before tackling this material you should know how to implement foldr for lists and at least one other data structure, such as a tree. (folds are catamorphisms) Knowing how to implement an unfold (anamorphism) for the same will round things out a bit.

This material dovetails with traversable and foldable.

http://patrickthomson.ghost.io/an-introduction-to-recursion-schemes/

http://fho.f12n.de/posts/2014-05-07-dont-fear-the-cat.html - good demonstration of how hylomorphism is the composition of cata and ana.

http://comonad.com/reader/2009/recursion-schemes/ - this field guide is excellent.

http://eprints.eemcs.utwente.nl/7281/01/db-utwente-40501F46.pdf

https://www.fpcomplete.com/user/edwardk/recursion-schemes/catamorphisms

Lenses and Prisms

People vastly overestimate the difficulty of using Lens. Anybody comfortable with Functor/Foldable/Traversable (or even just the first one) can leverage lenses and prisms to make their life happier.

If you've ever done something like: (fmap . fmap) you've were "lensing" in your head.

I recommend these two tutorials/introductions:

https://www.fpcomplete.com/school/to-infinity-and-beyond/pick-of-the-week/a-little-lens-starter-tutorial

https://github.com/ekmett/lens#lens-lenses-folds-and-traversals

Type and Category Theory (not needed to actually write Haskell, just for those interested!)

If you want to follow up on the type and category theory:

http://www.cis.upenn.edu/~bcpierce/tapl/

http://en.wikibooks.org/wiki/Haskell/Category_theory

http://www.haskell.org/haskellwiki/Category_theory

https://www.google.com/search?q=Awodey+Category+Theory

http://www.cs.kent.ac.uk/people/staff/sjt/TTFP/

Ad-hoc & parametric polymorphism, free theorems

http://swizec.com/blog/week-20-making-ad-hoc-polymorphism-less-ad-hoc/swizec/6564

http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment