Setting up a Haskell development environment
April 23, 2020
Once again I find myself trying to learn Haskell. I’ve given up on this multiple times in the past, in no small part due to tooling issues: why is Stack trying to download so many different versions of GHC? why can’t I ever get any IDE-like functionality to work properly in Visual Studio Code?
I asked for advice from the Haskell community at the Recurse Center, and ended up deleting all my existing Stack/Cabal/haskell-ide-engine/Homebrew/??? installs and following this guide instead. The instructions were mostly correct, though a couple of things have been renamed or updated. For the sake of completeness and my own future reference, here is what I ended up doing to get a working development environment:
- Install Stack using good old
curl | sh
- Run a Stack command (like
stack path --stack-root), then hit Ctrl-C to cancel as soon as it starts trying to download GHC 8.8.something. Then, edit
~/.stack/global-project/stack.yamland change the
resolverline to the GHC version you want. I went with 8.6.5, which is referred to as
lts-14.27on the Stackage homepage.
- Make a new project:
stack new someproject; note that you still need to update the resolver in its
- Install the syntax highlighting VS Code extension (
- Install the hlint VS Code extension (
- Install hlint globally (
stack install hlint). This will take a while.
- Clone the source for Haskell IDE Engine
- In your home directory (or somewhere else outside of a Stack project), double-check your GHC version (
stack ghc -- --version), then run the following commands in the
haskell-ide-enginedirectory, substituting your GHC version. This will take a long while. (NB: This worked fine on macOS, but on Ubuntu, it failed at first, because one of the dependencies couldn’t link against the
tinfolibrary. Apparently the way to fix this is by installing the development version of libncurses:
sudo apt install libncurses-dev.)
stack ./install.hs hie-8.6.5 stack ./install.hs data
- Install the Haskell Language Server VS Code extension (
- Install the dependencies for the debugger adapter:
stack install haskell-dap ghci-dap haskell-debug-adapter. This will take a while, but not as long as HIE.
- Install the debugger adapter VS Code extension (
Once you have all this stuff installed, your Haskell project should have syntax highlighting, linting/rewrite suggestions, docs/types on hover, debugger support, and probably a bunch of other cool stuff I haven’t discovered yet!