[Haskell-cafe] Month in haskell-ide-engine December 2015

Alan & Kim Zimmerman alan.zimm at gmail.com
Fri Jan 1 19:13:44 UTC 2016

Welcome Haskell IDE Engine (future) users,

[also available online at

Haskell IDE Engine progress report for December 2015.

What is Haskell IDE Engine?

Not an IDE, still no release, it is a work in progress.

It is a common point to join together the effort of integrating tools
into an IDE and the effort of writing tools for an IDE, by providing
an API in the middle that each of these parties can work from and to.

Important developments

This month has been mostly about turning ideas into practice, and
dealing with the details that come out when things become concrete.

The more concrete things we have are:

1. Auto-generated API documentation (@cocreature)

One of the principles of HIE is that each plugin/command provides a
PluginDescriptor documenting the commands it provides, parameters they
take and return types.

Moritz Kiefer has created a module[1] to take this information and
generate API documentation[2]. The information is present, but help
with styling / presentation will be gladly accepted.

[1] https://github.com/haskell/haskell-ide-engine/tree/master/hie-docs-generator
[2] https://haskell.github.io/haskell-ide-engine/

2. Leksah context menu (@jpmoresmau)

JP Moresmau has extended the Leksah integration[3][4] to now provide a
context-specific menu providing available HIE commands. This includes
the ability to invoke HaRe to do refactorings. To enable this we now
have a specific hie-base[5] module with just the basic types which can
be included in the IDE side if it is fortunate enough to use haskell.

[3] https://github.com/JPMoresmau/leksah/tree/hie_integration
[4] https://github.com/JPMoresmau/leksah-server/tree/hie_integration
[5] https://github.com/haskell/haskell-ide-engine/tree/master/hie-base

3. Deeper Emacs integration (@cocreature)

The Emacs integration uses the PluginDescriptor to generate a set of
elisp functions corresponding to each plugin command.

The macro generating these has been extended to populate the
docstrings for these.
It also handles the HieDiff return type which means it can apply the
changes from a HaRe refactoring, or any other plugin generating a
It prompts interactively for any additional parameters required.

4. New plugins

applyrefact is a wrapper around Matthew Pickering's library to apply
hlint changes to source code.
egasync is an example wrapper showing how a plugin can launch its own
process in the server and stream output from it back to the IDE, if
the transport used supports this. Otherwise the transport will batch
it up when a request is received for the output.

Current project focus

The current project focus is still on getting our collective heads
straight on what actually needs to be done, and providing working
integrations to at least 2 IDEs to get a better feel for what is

Both of these are well in hand, and if anyone would like to join in
the discussion happens via the github issue tracker and docs section
of the project, as well as IRC at #haskell-ide-engine on freenode.

Issues closed in December

Decide on matching an existing IDE protocol or designing a new one #2
Representation of arbitrary types for a plugin #14
Plugin function definition #16
Add QuickCheck tests for FromJSON / ToJSON instances #48
Check PluginDescriptor on loading #52
Add a signal handler to flush logs on exit #58
Plugin startup / private data #83
Create a diff type #95
Replace logging package #112
Split between haskell-ide-engine and haskell-plugin-api #118
Document existance of module-management package and ghc-vis #124
Provide ghc-modi transport? #125
Sort out ghc-mod session management #127
Git integration #128
apply-refact plugin #131
emacs: how to run hie with arguments / logging #134
Change HieDiff to represent a standard patch format #138

Pull requests merged in December

Detect plugin param name collisions #115
Bring in a diff type, and introduce semantic types #116
New logger #120
Rework api split #122
(elisp) Add log of hie process input / output #123
Ghc mod session #130
Apply refact plugin #133
Ghc mod find #135
Plugin state #137
Change HieDiff to use a patch format #139
Hare context #141
Initial example async process plugin #143
Base split #144
Support more commands #145
Add tests for hie-create-command #146
Add integration test for hie-hare-rename #147
Move to a plugin/command url scheme #148
Documentation generator #149

Contributors active in December

Alan Zimmerman, Daniel Gröber, JP Moresmau, Michael Sloan, Moritz
Kiefer, Tobias G. Waaler


Haskell IDE Engine needs volunteers like any other open source
project. For more information see:


Also drop by our IRC channel: #haskell-ide-engine at irc.freenode.net.


More information about the Haskell-Cafe mailing list