Next: , Previous: , Up: Top   [Index]

3 Editing Haskell Code

Haskell Mode as one of its components provides a major mode for editing Haskell source code called haskell-mode, which gave the name to the whole project. There is a derived mode provided called literate-haskell-mode that support Literate Haskell source code both in Bird and in Latex forms.

Haskell Mode supports files with the following extensions:


official file extension for Haskell files. Haskell Mode out of the box supports most of GHC extensions.


official file extension for Literate Haskell files. Both Bird and Latex styles are supported.


Haskell interfaces to C code used by hsc2hs pre-processor.


Haskell source with CPP pragmas used with cpphs pre-processor.


Haskell FFI bindings to C libraries used with c2hs pre-processor.

Haskell Mode offers many productivity tools described in following chapters in this manual.

3.1 Managing imports

There are a few functions for managing imports.

3.1.1 Jump to imports

To jump to your import list, run

M-x haskell-navigate-imports

It’s nicer to have a keybinding to do this, for example:

(define-key haskell-mode-map (kbd "<f8>") 'haskell-navigate-imports)

You can hit it repeatedly to jump between groups of imports. It will cycle.

3.1.2 Format imports

To generally format (sort, align) your imports, you can run

M-x haskell-mode-format-imports

Or C-c C-,.

3.1.3 Sort imports

To just sort imports, jump to an import section and run

M-x haskell-sort-imports

3.1.4 Align imports

To just align imports, jump to an import section and run

M-x haskell-align-imports

3.1.5 stylish-haskell

As an alternative to the elisp functions described above, haskell-mode can use the program stylish-haskell to format imports. You can set this behavior by typing: M-x customize-variable RET haskell-stylish-on-save. You can install stylish-haskell by running stack install stylish-haskell, or if you have not installed stack, cabal install stylish-haskell.

3.2 Haskell Tags

haskell-mode can generate tags when saving source files. To generate tags haskell-mode uses external program — Hasktags (wiki-article). To turn on tags generatation customize or set to t haskell-tags-on-save variable. Also, you may find useful to revert tags tables automatically, this can be done by customizing tags-revert-without-query variable (either globally or for Haskell buffers only).

3.3 Profiling and Debugging support

When profiling code with GHC, it is often useful to add cost centres by hand. These allow finer-grained information about program behavior. haskell-mode provides the function haskell-mode-toggle-scc-at-point to make this more convenient. It will remove an SCC annotation at point if one is present, or add one if point is over whitespace. By default it is bound to C-c C-s.

Next: , Previous: , Up: Top   [Index]