The class lecture notes are full of hyperlinks. If you want more information on a topic covered in lecture, start by clicking through any links on the slides.
A Gentle Introduction to Haskell - Not particularly gentle despite the title, but covers the basics pretty thoroughly
Haskell 2010 Language Report - The normative language specification. We don't necessarily recommend reading it cover-to-cover, but when you want a definitive answer to something about the language, this is the pace to turn.
Tackling the awkward squad - Good introduction to the IO Monad, concurrency, exceptions, and FFI. Quite accessible if you skip the sections on semantics.
The Typeclassopedia is a good overview of various classes such as
Applicative, etc., and their relationships.
Hackage has a large collection of Haskell packages.
cabalprogram ships with the Haskell Platform. A few tips:
$HOME/.cabaland tells GHC how to find them by modifying
$HOME/.ghc. You must delete both directories if you want to start over with a "clean slate". Bad things will happen if you delete
cabal updateto initialize your package database and create a
cabal update but before installing any packages, it is highly recommended that you edit
$HOME/.cabal/config to set the following configuration options:
documentation: True library-profiling: True
documentation will install documentation in your home directory. You may want to visit
$HOME/.cabal/share/doc/index.html and bookmark that page in your browser.
library-profiling will allow you to profile your executables, but more importantly allows you to get something resembling a stack trace if you are trying to debug an unanticipated exception.
Hoogle - the absolute must-bookmark site. Click Search plugin to create a bookmark, or manually add a link with a short search keyword (such as
Hayoo - similar to Hoogle. Searches are slower, but it indexes more packages. The URL for a keyword bookmark is
The main GHC documentation site.
The standard libraries that ship with GHC, including the base and ghc-prim packages. The documentation links to source code. If you fiddle with URLs, you also can find HTMLified source code for modules such as GHC.Base that don't show up in the documentation contents.
Tip for debugging uncaught exceptions: Compile your program with
ghc -rtsopts=all -prof -auto-all --make ...
Then, when you run your program from the command line, give it the extra arguments
+RTS -xc -RTS. It should dump a stack trace to stderr when an exception occurred.
There is a Haskell mode for emacs, but you have to install it separately. Some OSes have a package for it, some don't (in which case you can put it in your home directory). David uses the following configuration is his
(add-to-list 'completion-ignored-extensions ".hi") (or (fboundp 'haskell-mode) (let ((paths '("~/haskell-mode-2.8/haskell-site-file" "/usr/share/emacs/site-lisp/haskell-mode/haskell-site-file"))) (while paths (if (not (file-exists-p (concat (car paths) ".el"))) (setq paths (cdr paths)) (load (car paths) t t) (setq paths nil))))) (add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode) (add-hook 'haskell-mode-hook 'turn-on-haskell-indent) (add-hook 'haskell-mode-hook (lambda () (require 'inf-haskell)))
It is convenient to run GHCI within emacs. Typing
C-c C-l while editing a Haskell source file starts GHCI and loads the current file.