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 Monoid
, Functor
, Monad
, Applicative
, etc., and their relationships.
Hackage has a large collection of Haskell packages.
cabal
program ships with the Haskell Platform. A few tips:
$HOME/.cabal
and 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 $HOME/.cabal
but not $HOME/.ghc
.cabal update
to initialize your package database and create a $HOME/.cabal
directory.After running 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 ho
) to:
http://www.haskell.org/hoogle/?hoogle=%s
Hayoo - similar to Hoogle. Searches are slower, but it indexes more packages. The URL for a keyword bookmark is
http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=%s
The main GHC documentation site.
The GHC User's guide, including a chapter on GHCI.
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 .emacs
file:
(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.
The #haskell IRC channel contains many people willing to discuss Haskell and answer questions.
Haskell Cafe is a mailing list for general Haskell-related discussion.
Several Haskell experts regularly answer questions on Stack Overflow.