Ariadne is a new tool written by Roman Cheplyaka that provides the go-to-definition functionality for Haskell code. It is designed as a server that responds to queries from IDEs and text editor plugins transmitted via the BERT-RPC protocol over TCP. The server is implemented in Haskell using Roman’s haskell-names name resolution library. It is fully Haskell-aware and can properly locate prefixed names (like
T.head) and locally bound names, which makes it quite a bit smarter than TAGS. Ariadne is in an early development stage, and as of v0.1.2 it can only find definitions in the current file, but I am sure this and other limitations will be lifted in future versions.
ariadne-el allows you to communicate with Ariadne from Emacs. It uses my own bert-el, BERT serialization library for Emacs, for encoding/decoding BERT-RPC protocol messages. I have to admit that I never worked with networking facilities of Emacs before, so I shamelessly borrowed the design of low-level networking from SLIME.
- Install Ariadne and run the
- Install bert-el and ariadne-el by cloning the Git repositories and adding their paths to
load-path. If you use Marmalade, you can also obtain both packages by running
M-x package-install ariadne.
- Add the following lines to your
(require 'ariadne) (add-hook 'haskell-mode-hook (lambda () (define-key haskell-mode-map "\C-cd" 'ariadne-goto-definition)))
Now try to open any Haskell source file, put the cursor on any name, and press