% HaskellerZ - Link Collection
This link collection was originally assembled for the Functional Programming and Formal Methods course taught at the CS department of ETH Zurich. It is now maintained by the HaskellerZ meetup group for the benefit of all fellow Haskellers.
Note: if you are interested in Haskell and located near Zurich, then why don't you drop by in one of the HaskellerZ meetups? You are very welcome there :-)
Installing GHCi:
-
The easiest way to install GHCi on OS X and Windows is to use the Haskell platform packages.
-
On Linux, we recommend to use GHC packages provided by your distribution or the binary packages provided on the GHC hompage.
Using GHCi:
-
Good text editors: Notepad++ (Windows), Kate (Linux with KDE desktop), gedit (Linux with GNOME desktop), jEdit (cross platform), vim (cross platform), and emacs (cross platform with good haskell-mode)
Learning Haskell:
-
A style guide for writing Haskell code
-
Hoogle: search the Haskell libraries by name and/or type
-
The Haskell Prelude (Hugs version):
-
Commented version (note that the source code of this version is slightly different from the Hugs version, as it is optimized for speed).
-
Free online version of the excellent books Real World Haskell and Learn You a Haskell for Great Good. Have a look at the Haskell bookshelf for more books.
-
Have a look at the Typeclassopedia to gain more understanding of standard typeclasses like
Functors
andMonads
. -
Note that the official definition of the syntax and the semantics for Haskell is given in the Haskell 2010 report.
As soon as you develop some real applications, you'll need a good build environment and the speed of a compiled executable. The first is given the the Common Architecture for Building Applications and Libraries (cabal). The later is given by the Glasgow Haskell Compiler (GHC), whose interactive shell GHCi you are already using. Apart from GHCi, GHC also supports various extensions to the Haskell language and features an integrated debugger.
-
The GHCi debugger
-
Tutorial for the debugger
-
support for Concurrent Haskell including Software Transactional Memory and a prototype of Data Parallel Haskell.
There exists a fast growing repository of Haskell libraries that will serve you very well during your daily programming excursions. They are all developed collaboratively on Hackage go and check them out. A few that you should definitively have a look at are:
-
vector: the state-of-the art array library
-
bytestring: types and functions to manipulate sequences of bytes
-
text: types and functions to manipulate strings, i.e., sequences Unicode characters
-
attoparsec: efficiently parsing bytestrings and text values.
-
aeson: JSON decoding and encoding
-
cmdargs: command-line parsing made easy
-
criterion: benchmarking Haskell functions made easy. Note that criterion supports the precise measurements of functions taking just a few nano-seconds to execute.
-
repa: high performance, regular, multi-dimensional, shape polymorphic parallel arrays. See this real-time raytracer implemented using it.
Some of the libraries are also just cool and understanding them will widen your computer science horizon.
For a long time, Haskell and other functional languages like
OCaml,
SML,
Scala, and
F# have been a research only programming languages.
However this is no longer the case. There are companies like
Galois Inc. (Haskell),
Bluespec (Haskell),
Credit Suisse (F#)
Twitter (Scala)
and quite a few more that are
using functional languages like Haskell to solve their real world
problems. See the book
"Real World
Haskell"
(online) for explanations on
how to do this best.
Furthermore, there are also a number of exciting open-source project being developed using Haskell. Most notably there are:
-
darcs version control system
-
xmonad window manager
-
yesod, and snap, and happstack are Haskell web application servers similar to Ruby on Rails, but with added benefits like type safety and the speed of a compiled language. See the book about yesod for more information about the benefits.
-
yi text editor fully scriptable using dynamically loaded Haskell plugins
-
and many more
All of these projects are open for contributions, not to forget that there surely are plenty of ideas you have that could possibly be realised using Haskell...
Haskell has attracted a very active and friendly community. They use the following communication channels
-
blogs: see the aggregates http://planet.haskell.org and the Haskell subreddit for more links
Some interesting blogs (posts) are:
-
Lambda the Ultimate Programming Languages Weblog
-
Epic Games programmer Tim Sweeny at POPL'05 about the next mainstream programming language
There is a lot of active research going on with respect to functional languages and more correct and more productive programming in general. A very good starting point to delve into these topics is Oleg Kiselyov's homepage. For a starting point with respect to the implementation of functional languages see Simon Peyton Jones homepage. A few topics you might want to investigate
-
learn about category theory
- good and free lecture notes are the Category Theory Lecture Notes
-
learn about type level programming
-
statically checking correct usage of physical units (see this blog post and this library)
-
facilitated by the recent extension to GHC's type system
-
-
learn about dependent types and
-
lightweight dependent-type programming, i.e., using Haskell's type system to preserve invariants like no out of bounds array access statically)
-
proving software correct using the calculus of constructions in Coq
-
proving software correct using Higher Order Logic in Isabelle/HOL
-
-
learn about the relation between Haskell and object oriented software construction: OOHaskell
\