-
Notifications
You must be signed in to change notification settings - Fork 175
Frontend
The Emacs front-end is available from stable MELPA. The stable version should always be compatible with the latest version of ghc-mod from hackage which is not true for plain MELPA!
You can also use a git checkout of the ghc-mod source repository as your source for the Elisp code if you prefer.
To use stable MELPA add this to your .emacs
:
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://stable.melpa.org/packages/"))
(package-initialize)
;; ... install the "ghc" package using `M-x package-list-packages' ...
(add-hook 'haskell-mode-hook #'ghc-init)
(See also http://www.emacswiki.org/emacs/ELPA)
With this configuration you can install the Emacs front using:
M-x package-refresh-contents RET
M-x package-install RET ghc RET
Note: the ELPA package is called ghc
, not ghc-mod
To install the ghc-mod Emacs frontend without ELPA you need to obtain the
ghc-mod source code either through git or via a tarball and then add this to
your .emacs
:
(add-to-list 'load-path "<wherever>/ghc-mod/elisp")
(setq ghc-debug t) ; enable debug logging
(autoload 'ghc-init "ghc" nil t)
(autoload 'ghc-debug "ghc" nil t)
(add-hook 'haskell-mode-hook #'ghc-init)
You'll have to replace <wherever>
by the location you chose to put the ghc-mod
source directory in.
Make sure the source matches the version of the ghc-mod executables you installed otherwise you will run into all sorts of trouble.
You can check this by looking at the ghc-version
variable:
M-x describe-variable RET ghc-version RET
This value should match the output of the following command:
$ ghc-mod --version
Since Vim didn't have a built-in package manager until version 8, there are
numerous external ones written by members of the community. One of the newer
ones is vim-plug, which the rest of this section will use. The most relevant
features for this guide are that it can install packages straight from Git
repositories, and can run a shell command such as make
whenever a certain
package is updated. Since vim-plug is more convenient, it is suggested to use it
even with Vim 8.
Install vim-plug by putting a single file, plug.vim
, into Vim's auto-load
directory (~/.vim/autoload
for normal Vim, or ~/.config/nvim/autoload
for
NeoVim).
Most features of ghc-mod are provided by the plugin ghcmod-vim. Name completion is handled by a separate package, neco-ghc, which provides support for Vim's built-in omni completion, and also Just Works with neocomplete or deoplete (deoplete is faster, but only works with NeoVim). If you decide to use neocomplete, then it depends on vimproc to load completions asynchronously.
Keep in mind that at the moment, ghcmod-vim doesn't keep ghc-mod loaded in the background, so it can be quite slow at times.
An example .vimrc
using vim-plug and neocomplete:
call plug#begin('~/.vim/plugged')
Plug 'eagletmt/ghcmod-vim', {'for': 'haskell'}
Plug 'Shougo/vimproc.vim', {'do': 'make'}
Plug 'Shougo/neocomplete.vim', {'for': 'haskell'}
Plug 'eagletmt/neco-ghc', {'for': 'haskell'}
call plug#end()
" Use neco-ghc for completion
autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc
After editing, make Vim reread the file with :source %
, and then install the
plugins with :PlugInstall
. You can update the plugins periodically with
:PlugUpdate
.
To use ghc-mod
with Atom you should install
ide-haskell
and the companion
haskell-ghc-mod
. Installation
instructions can be found here: https://atom-haskell.github.io/installation/installing-binary-dependencies/.