111 lines
4.6 KiB
Markdown
111 lines
4.6 KiB
Markdown
---
|
|
title: Using GHC IDE for Haskell Error Checking and Autocompletion
|
|
date: 2020-01-06T17:07:25-08:00
|
|
tags: ["Haskell", "Language Server Protocol"]
|
|
---
|
|
|
|
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:
|
|
|
|
![Imgur](https://i.imgur.com/CRMznGL.png)
|
|
|
|
### Downloading and Installing GHC IDE
|
|
GHC IDE is a Haskell-based program that uses the
|
|
{{< sidenote "right" "lsp-note" "language server protocol" >}}
|
|
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 <a href="{{< relref "/blog/haskell_language_server" >}}#prelude-language-server-protocol">in the previous iteration of this post.</a>
|
|
If you want more information, check out the <a href="https://microsoft.github.io/language-server-protocol/">official Microsoft page on LSP.</a>
|
|
{{< /sidenote >}} 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](https://git-scm.com/) 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 `cabal-install` package,
|
|
and is required normally for this class) or `stack` (a build tool). For `cabal`:
|
|
|
|
```
|
|
cabal install
|
|
```
|
|
|
|
And for `stack`:
|
|
|
|
```
|
|
stack install
|
|
```
|
|
|
|
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
|
|
to your `.bashrc` file (or equivalent):
|
|
|
|
```
|
|
export PATH=$PATH:/home/<yourusername>/.local/bin
|
|
```
|
|
|
|
On Windows, this is done by
|
|
{{< sidenote "right" "path-note" "editing your PATH variable." >}}
|
|
If you need to know how to change your <code>PATH</code>, I wrote
|
|
about it briefly in the <a href="{{< relref "/blog/haskell_language_server" >}}
|
|
#installation-of-v0-5-0-0-windows-systems">previous iteration of this post.</a>
|
|
{{< /sidenote >}} 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
|
|
given by:
|
|
|
|
```
|
|
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).
|
|
|
|
#### Atom
|
|
There appears to be an Atom extension specifically for GHC IDE:
|
|
[ide-haskell-ghcide](https://atom.io/packages/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](https://atom.io/packages/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
|
|
```
|
|
|
|
#### VSCode
|
|
The team behind GHC IDE maintains an official VSCode extension found
|
|
[here](https://marketplace.visualstudio.com/items?itemName=DigitalAssetHoldingsLLC.ghcide).
|
|
Installing it, when you have GHC IDE also installed, should be sufficient to get
|
|
VSCode to autocomplete and error check.
|
|
|
|
#### (Neo)vim
|
|
My original recommendations for (neo)vim remain unchanged, with the exception
|
|
of using `ghcide` instead of `hie` in the `serverCommands` variable. You
|
|
can find the original instructions
|
|
[here](https://danilafe.com/blog/haskell_language_server/#neovim).
|
|
|
|
### Conclusion
|
|
I hope that using GHC IDE, you'll be able to have a significantly more pleasant
|
|
Haskell experience in CS 381. Enjoy!
|