Add GHC IDE instructions for Haskell
This commit is contained in:
parent
67181fb033
commit
263ffe2b8c
111
content/blog/haskell_language_server_again.md
Normal file
111
content/blog/haskell_language_server_again.md
Normal file
|
@ -0,0 +1,111 @@
|
|||
---
|
||||
title: Using GHC IDE for Haskell Error Checking and Autocompletion
|
||||
date: 2020-01-06T17:07:25-08:00
|
||||
draft: true
|
||||
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-v0500-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!
|
Loading…
Reference in New Issue
Block a user