Getting Set Up
The simplest way to get started with Haskell is the Stack build system. Stack handles sandboxing (allowing different projects to use different versions of the GHCThe Glasgow Haskell Compiler is by far the most commonly-used Haskell compiler, and provides a variety of extensions to the standard Haskell language.
compiler and packages), dependency resolution, and building Haskell applications.
On Mac, you can install Stack using the Homebrew package manager.
brew install stack
For other operating systems or if you do not want to use Homebrew, see the installation instructions.
Starting a New Project
The following command will create a new project called
first-project using the
stack new first-project simple cd first-project
with the following directory structure.
. ├── LICENSE ├── README.md ├── Setup.hs ├── first-project.cabal ├── src │ └── Main.hs └── stack.yaml
Now, the project can be built into an executable and run.
stack build stack exec first-project
For details on Stack, see the user manual.
An important tool in Haskell development is
ghci, a REPLRead-Eval-Print-Loop
provided by GHC. We can start
ghci and load our project’s code as follows.
The only function currently defined in our project (in
main, which we can run in the repl.
*Main> main hello world
We can run Haskell code in
ghci. It is important to note that
ghci does not execute code in the same way it is executed in a Haskell program. Instead, it is executed in a computational context known as a monad, which allows symbols to be redefined to take on new values, among other things. This will become clearer in the next set of notes.
ghci also supports a variety of specialty commands. The most useful will be
:r, which reloads the project code,
:t x, which gives the type of
:q, which quits the repl.
*Main> :r Ok, one module loaded. *Main> :t "Hello" "Hello" :: [Char]
A variety of tooling is available for Haskell. We recommend, at least at first, setting up syntax highlighting in the text editor of your choice and relying only on it and ghci.