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


3 Editing Haskell Code

Haskell Mode is actually a collection of so-called major modes1 one of which is called haskell-mode. To avoid confusion, when referring to this package the name “Haskell mode” is written in a normal font, whereas when referring the major mode of the same name haskell-mode written with a dash in-between in a typewriter font is used.

As one might guess, haskell-mode is the (programming language2) major mode for editing (non-literate) Haskell source code. haskell-mode is associated with the file extensions listed below by default3.

.hs

official file extension for (non-literate) Haskell 98/2010 files

.hsc

“almost-Haskell” input file for the hsc2hs pre-processor

.cpphs

input file for the cpphs pre-processor

The major mode literate-haskell-mode (which is derived from haskell-mode and thus transitively from prog-mode) provides support for literate Haskell programs and is associated with the .lhs file extension by default.

literate-haskell-mode supports Bird-style as well as TeX-style literate Haskell files. The currently detected literate Haskell variant is shown in the mode line (see (emacs)Mode Line) as either ‘LitHaskell/bird’ or ‘LitHaskell/tex’.

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.


Footnotes

(1)

for more information about the concept of major modes see (emacs)Major Modes

(2)

haskell-mode is derived from prog-mode

(3)

for more information about file associations, see (emacs)Choosing Modes


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