diff --git a/content/blog/haskell_language_server_again.md b/content/blog/haskell_language_server_again.md new file mode 100644 index 0000000..aa2b22d --- /dev/null +++ b/content/blog/haskell_language_server_again.md @@ -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 }}#prelude-language-server-protocol">in the previous iteration of this post. +If you want more information, check out the official Microsoft page on LSP. +{{< /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//.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 PATH, I wrote +about it briefly in the }} +#installation-of-v0500-windows-systems">previous iteration of this post. +{{< /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: + +``` +/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!