Last year, when I took Oregon State University’s CS 381 class, I ended up setting up my editor with the Haskell IDE engine. This made it possible to detect errors, view types, and have good autocompletion within the editor itself. Recently, I’ve found that GHC IDE works better for my projects, so instead of butchering the original article, I’ll just quickly write an updated version here, referencing the old one when necessary.
By the end of the article, your editor should be able to detect errors and properly autocomplete Haskell code, somewhat like in the below screenshot:
Downloading and Installing GHC IDE
GHC IDE is a Haskell-based program that uses the [note: You don't really need to know what the language server protocol (LSP) is to use GHC IDE. If you are nonetheless interested, I wrote a little bit about it in the previous iteration of this post. If you want more information, check out the official Microsoft page on LSP. ] to communicate with any editor that supports it. Editors with support the the LSP include Atom, Visual Studio Code, Emacs, and Vim. Thus, You can get a good Haskell development environment without tying yourself to one application or service.
We first want to download the GHC IDE. To do this, you need to have Git installed. Once you have that, in your Git bash (on Windows) or in your terminal (maxOS, Linux), type the command:
git clone https://github.com/digital-asset/ghcide.git
To install GHC IDE, you can use either
cabal (which is typically the
and is required normally for this class) or
stack (a build tool). For
This will create an executable in your
~/.local/bin directory. By default, this
is not usable from other programs, such as Vim, so you should add this directory
to your path. On Linux and macOS, this is done by adding the following line
.bashrc file (or equivalent):
On Windows, this is done by
If you need to know how to change your
PATH, I wrote
about it briefly in the previous iteration of this post.
I don’t run Windows,
so I don’t know where
cabal install will place the executable, but I do know
where the executable will appear if you use
stack install - in the directory
stack path --local-bin
Adding that to your path should be sufficient to use GHC IDE.
Setting up Your Editor
This is where the paths diverge. I personally use (Neo)vim, but for the sake of completeness, I’ll go over installation for Atom and VSCode (I’m not including Emacs because I know nothing about configuring Emacs).
There appears to be an Atom extension specifically for GHC IDE:
ide-haskell-ghcide. It doesn’t
have a lot of configuration options, and will certainly require GHC IDE to
be in your path. However, since both GHC IDE and the Haskell IDE engine
use the Language Server Protocol, the more mature ide-haskell-hie extension may work, as well. In fact, since
ide-haskell-ghcide is so young,
I’d recommend trying
ide-haskell-hie first, configuring the settings (found under
Settings > Packages > (Search ide-haskell-hie) > Settings)
to use the following full path:
<output of stack path --local-bin>/ghcide
The team behind GHC IDE maintains an official VSCode extension found here. Installing it, when you have GHC IDE also installed, should be sufficient to get VSCode to autocomplete and error check.
My original recommendations for (neo)vim remain unchanged, with the exception
ghcide instead of
hie in the
serverCommands variable. You
can find the original instructions
I hope that using GHC IDE, you’ll be able to have a significantly more pleasant Haskell experience in CS 381. Enjoy!