Starter Kit Haskell
This is part of the Emacs Starter Kit.
Starter Kit Haskell
Support for editing Haskell
Setting up cabal
You can skip these steps if you've already setup ghc and cabal
Install cabal
Update cabal
#+start_src sh cabal install cabal-install #+end
Set path to ~/.cabal/bin
echo 'PATH=~/.cabal/bin:$PATH'|tee -a ~/.profile source ~/.profile which cabal
The last line should show you that you are now using the local and latest version of cabal located in your ~/.cabal/bin directory.
Innstall Packages for Development
Haskell modes usually have two components to them. One side is haskell and the other side is installed and configured in Emacs
We will want to install some basic haskell packages in our ~/.cabal & ~/.ghc user directories. This makes them available along side cabal for doing development on your projects.
Running those commands in the shell might take some time - emacs appears to be frozen; trust me, it's not
cabal install happy alex ;# needed but not listed as dependency
Paste the following into your terminal:
Pretty lambdas
pretty lambdas in Haskell code
(defun pretty-lambdas-haskell () (font-lock-add-keywords nil `((,(concat "(?\\(" (regexp-quote "\\") "\\)") (0 (progn (compose-region (match-beginning 1) (match-end 1) ,(make-char 'greek-iso8859-7 107)) nil))))))
Haskell Mode
Install Haskell mode
(starter-kit-install-if-needed 'haskell-mode)
Configure
(add-hook 'haskell-mode-hook 'run-starter-kit-coding-hook) (when (window-system) (add-hook 'haskell-mode-hook 'pretty-lambdas-haskell)) (add-hook 'haskell-mode-hook 'interactive-haskell-mode) ;; Ignore compiled Haskell files in filename completions (add-to-list 'completion-ignored-extensions ".hi")
Stylish Haskell
A simple Haskell code prettifier.
This tool tries to help where necessary without getting in the way.
Features
- Aligns and sorts import statements
- Groups and wraps {-# LANGUAGE #-} pragmas, can remove (some) redundant pragmas
- Removes trailing whitespace
- Replaces tabs by four spaces (turned off by default)
- Replaces some ASCII sequences by their Unicode equivalents (turned off by default)
cabal install stylish-haskell
Configuration
To call it for every save, make sure you have C-x C-s rebound to haskell-mode-save-buffer.
(defadvice haskell-mode-stylish-buffer (around skip-if-flycheck-errors activate) (unless (flycheck-has-current-errors-p 'error) ad-do-it)) (setq haskell-stylish-on-save t)
GHC mod
The ghc-mod command is a backend command to enrich Haskell programming on editors including Emacs, Vim, and Sublime.
Install ghc-mod
cabal install ghc-mod
(starter-kit-install-if-needed 'ghc)
Structured Haskell
This minor mode provides structured editing operations based on the syntax of Haskell. In short-hand it's called SHM and throughout the codebase, too. It acts a bit like, and is heavily inspired by, paredit-mode for Emacs.
Install structured Haskell
cabal install structured-haskell
(starter-kit-install-if-needed 'shm)
Configure
(add-hook 'haskell-mode-hook 'structured-haskell-mode) ;; The following are apparently pretty good for solarized-light. ;;(set-face-background 'shm-current-face "#eee8d5") ;;(set-face-background 'shm-quarantine-face "lemonchiffon")
Installing Haskell-Mode Extensions
Install flycheck
(starter-kit-install-if-needed 'flycheck) (add-hook 'flycheck-mode-hook #'flycheck-haskell-setup) (global-flycheck-mode)
Install flyspell-haskell
(starter-kit-install-if-needed 'flyspell) (add-hook 'haskell-mode-hook 'flyspell-prog-mode)