Skip to content
The always-updated bare-minimum Emacs configuration for Haskell
Emacs Lisp Shell
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.


Emacs is an excellent editor for Haskell, but it requires a lot of configuration to get haskell-mode and ghc-mod installed and working. Especially tricky is that the tools you need to set up a decent .emacs.d environment aren't blessed or highlighted anywhere.

This init.el chooses Sane Defaults™ (use-package and Cask) to help get you started, and comments are sprinkled liberally in case you want to tweak it.


Before you get started, you'll need (as of writing) cabal-helper in your global stack.yaml, because it doesn't (yet) have a Stackage entry. Open up ~/.stack/global/stack.yaml in your favorite text editor and make sure it looks like this.

flags: {}
packages: []
  - cabal-helper-
resolver: lts-3.20

Go to the Stackage website and use the latest resolver. It almost definitely won't be 3.20 by the time you read this.

When that's done, you'll be ready to clone and run the handy-dandy setup script I wrote.

git clone ~/.emacs.d
cd !$


  • Syntax highlighting (haskell-mode)
  • Syntax checking (ghc-mod or hlint)
  • All the other fantastical ghc-mod features
  • Supports GHC 7.10 and Stack, in addition to older GHCs and Cabal
  • Package management with Cask
  • No impact on Emacs startup performance (use-package)

Try this

  • cd /tmp/scratch
  • stack new
  • stack build -- an unfortunate bug means you need to build before opening (as of writing)
  • emacs app/Main.hs
  • Move cursor to IO
  • Hit Ctrl-c, Ctrl-i to do the equivalent of an :info
  • Hit Ctrl-c, Ctrl-l to load the code into a GHCi session
  • Hit Ctrl-x, o to move to the session buffer
  • Type :info IO and hit Enter
You can’t perform that action at this time.