Haskell in 5 steps
Haskell is a general purpose, purely functional programming language. This page will help you get started as quickly as possible.
Haskell, like most other languages, comes in two flavors: batch oriented (compiler) and interactive (interpreter). An interactive system gives you a command line where you can experiment and evaluate expressions directly, and is probably a good choice to start with.
|GHC||Compiler and interpreter (GHCi)||Probably the most feature-complete system|
|Hugs||Interpreter only||Very portable, and more lightweight than GHC.|
While both GHC and Hugs work on Windows, Hugs has perhaps the best integration on that platform. There is also information available on installing Haskell software on Mac OS X.
Open a terminal. If you installed GHC type ghci (the GHC interpreter). If you installed Hugs type hugs.
$ ghci ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.4, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base-1.0 ... linking ... done. Prelude>
And you are presented with a prompt. The Haskell system now attentively awaits your input.
Write your first Haskell program
If you've learned to program another language, your first program probably was "Hello, world!", so let's do that:
Prelude> "Hello, World!" "Hello, World!"
The Haskell system evaluated the string, and printed the result. Or we can try a variation to print directly to standard output:
Prelude> putStrLn "Hello World" Hello World
Using a Haskell compiler, such as GHC, you can compile the code to a standalone executable. Create a source file hello.hs containing:
main = putStrLn "Hello, World!"
And compile it with:
$ ghc -o hello hello.hs
You can then run the executable (./hello on Unix systems, hello.exe on Windows):
$ ./hello Hello, World!
Haskell the calculator
Let's do something fun. In Haskell, your first true program is the factorial function. So back to the interpreter now and let's define it:
Prelude> let fac n = if n == 0 then 1 else n * fac (n-1)
This defines a new function called fac which computes the factorial of an integer.
We can now run fac on some argument:
Prelude> fac 42 1405006117752879898543142606244511569936384000000000
Congratulations! Mathematics made easy.
Note that if you're using Hugs, you'll need to load the definition of fac from a file, fac.hs, containing:
fac n = if n == 0 then 1 else n * fac (n-1)
And run it with Hugs as follows:
Hugs.Base> :l fac.hs Main> fac 42 1405006117752879898543142606244511569936384000000000
We can compile this to produce a standalone executable. In the file
fac.hs write (using elegant pattern matching instead of
fac 0 = 1 fac n = n * fac (n-1) main = print (fac 42)
which we can then compile and run:
$ ghc -o fac fac.hs $ ./fac 1405006117752879898543142606244511569936384000000000
Where to go from here
There are many good Haskell tutorials and books. Here are some we recommend:
- Yet Another Haskell Tutorial (English)
- Haskell-Tutorial (English)
- A Gentle Introduction to Haskell (English)
- Haskell Kurs (Deutsch)
- Programming in Haskell (English)
- Functional programming (English, Español, Netherlands) (Note, that this uses an old version of Haskell; e.g. input/output has changed since then)
- Tour of Haskell Syntax
- Haskell Reference
- Tour of the Haskell Prelude
- A tour of the Haskell Monad functions
- The Haskell School of Expression
- Haskell: The Craft of Functional Programming
- Introduction to Functional Programming using Haskell
- An Introduction to Functional Programming Systems Using Haskell
- Algorithms: A functional programming approach
- The Haskell Road to Logic, Maths and Programming
If you have questions, join the Haskell-Cafe mailing list or the IRC channel and ask. You can also ask questions here on the wiki, see Questions and answers. Information about Haskell support for various operating systems is here.