[Haskell Setup](#title)
# Haskell Setup
- I recommend using either Vim, Emacs, Atom or Visual Studio Code as text
editors for writing Haskell. (see more on editor plugins below.)
## Mac/Linux Instructions
- Install
[Stack](https://docs.haskellstack.org/en/stable/README/) by
running this shell command on non-Windows machines:
curl -sSL https://get.haskellstack.org/ | sh
echo 'PATH=$HOME/.local/bin:$PATH' >> ~/.profile
- Install ghcid:
stack install ghcid
- (optional IDE support) Install [ghcide](https://github.com/digital-asset/ghcide)
(recommended; it's faster):
# LINUX ONLY (You may need to install libtinfo-dev if on Linux)
# (See https://github.com/digital-asset/ghcide/issues/220)
sudo apt install libtinfo-dev
# (go to a directory where you want to put ghcide source)
git clone --depth 1 https://github.com/digital-asset/ghcide.git
cd ghcide
stack install --resolver=lts-14.20
- (optional IDE support) Install [Haskell IDE Engine](https://github.com/haskell/haskell-ide-engine)
(only as an alternative to ghcide; you don't need both; slower; has more
features, but we won't use them):
# (go to a directory where you want to put haskell ide engine)
git clone --depth 1 git@github.com:haskell/haskell-ide-engine.git
cd haskell-ide-engine
stack ./install.hs hie-8.6.5
## Windows Instructions
- Install the Windows Subsystem for Linux (WSL) by opening PowerShell.exe as
administrator and running:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
- Install Ubuntu inside WSL by downloading and executing this installer:
https://aka.ms/wsl-ubuntu-1604
- Install make, git and stack by running Bash.exe and executing:
sudo apt install make
sudo apt install git
curl -sSL https://get.haskellstack.org/ | sh
- Install ghcid:
stack install ghcid
- (optional IDE support) Install [ghcide](https://github.com/digital-asset/ghcide)
(recommended; it's faster):
# (You may need to install libtinfo-dev inside WSL)
# (See https://github.com/digital-asset/ghcide/issues/220)
sudo apt install libtinfo-dev
# (go to a directory where you want to put ghcide source)
git clone --depth 1 https://github.com/digital-asset/ghcide.git
cd ghcide
stack install --resolver=lts-14.20
- (optional IDE support) Install [Haskell IDE Engine](https://github.com/haskell/haskell-ide-engine)
(only as an alternative to ghcide; you don't need both; slower; has more
features, but we won't use them):
# (go to a directory where you want to put haskell ide engine)
git clone --depth 1 git@github.com:haskell/haskell-ide-engine.git
cd haskell-ide-engine
stack ./install.hs hie-8.6.5
## Testing Your Setup
- Put the following text into a file named "HelloWorld.hs":
module Main where
someNumber = 42
main = putStrLn "hello world"
and from the command line run `stack runghc ‹path to HelloWorld.hs›`; you
should see `hello world` printed to the console.
- From the command line run `stack ghci ‹path to HelloWorld.hs›` and you
should enter the interactive Haskell prompt. Type `someNumber` and it
should evaluate to `42`, as defined in the `HelloWorld.hs` file. To exit,
type `:q‹enter›` or `Ctl-D` to quit the prompt.
- To test ghcid: using the command line, navigate to the directory where
`HelloWorld.hs` lives and run `stack exec -- ghcid --test main
HelloWorld.hs`. Your command line should say `"hello world"` followed by
`...done`; note that ghcid is still running and has control of the window.
Now edit the `HelloWorld.hs` file from somewhere else (e.g., using a text
editor application or another command line window); change `"hello world"`
to something else like `"hello Walter, you are a good boy"`. When you save,
the window running ghcid should automatically update with the new message.
Next let's break the program; change `someNumber = 42` to
`someNumber = 42 + "Walter"`. When you save, ghcid should report a type
error that you can't add a numeric value to a string: `"No instance for
(Num [Char]) arising from a use of ‘+’"`.
- Test that the Makefile works used for the course homework. (replace
`‹course homework repository›` with the location of the repository posted
on Piazza.)
# (go to a directory where you want to checkout the homework files)
git clone ‹course homework repository›
cd cs225-hw-2020-01
make hw01
make hw01-i
make hw01-dev
The first make command will run the homework. The second make command will
run the homework and enter an interactive prompt; type `:q` or `Ctl-D`
(contrl-`D`) to quit. The third make command will run a ghcid compile/eval
loop; type `Ctl-C` to quit.
- Please try to install Haskell/stack early and ask for help if you run into
any issues. **Especially if you are planning on using Windows for this
class, get started ASAP and ask for help early.**
- Both of the IDE plugins (ghcide and haskell-ide-engine) support most
editors, e.g., for vim, via
[coc.vim](https://github.com/neoclide/coc.nvim). Feel free to ask on Piazza
for help installing any of these plugins for your favorite editor. (I
suggest using either Vim, Emacs, Atomn or VS Code text editors; they tend
to have best support for language plugins.)
- **coc.vim:**
Here are specific install instructions to get `ghcide` working with `vim`
and `coc.vim`. Before doing this, you should get `ghcide` installed per the
above instructions.
+ Make sure you are using Vim version 8 or later. Test this by doing `vim
-version`. If you see a version less than 8.0 you need to upgrade. If
you see version 8.0 or later, you can skip this part:
- *Linux or Windows Subsystem for Linux:*
Add repository for latest vim version
sudo add-apt-repository ppa:jonathonf/vim
Install latest vim:
sudo apt update
sudo apt install vim
- *Mac:*
Install Homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Install latest vim:
brew update
brew install vim
+ Install node:
curl -sL install-node.now.sh/lts | sudo bash
+ Clone the coc.vim project release to your vim plugin path:
(See https://github.com/neoclide/coc.nvim/wiki/Install-coc.nvim.)
mkdir -p ~/.vim/pack/coc/start
cd ~/.vim/pack/coc/start
curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz|tar xzfv -
+ Open vim with `vim`, type `:CocConfig` and it will take you to an empty
configuration file for `coc.vim`. Type `i` to get into insert mode and
paste this into the buffer:
{
"languageserver": {
"haskell": {
"command": "ghcide",
"args": [
"--lsp"
],
"rootPatterns": [
".stack.yaml",
".hie-bios",
"BUILD.bazel",
"cabal.config",
"package.yaml"
],
"filetypes": [
"hs",
"lhs",
"haskell"
]
}
}
}
Save and quit by pressing `‹Esc›` (escape) and then `:wq`.
+ You should be all set. To test, go to the homework directory root and
type `vim src/HW01.hs`. You should see warnings and errors on the fly
as you edit the file.