Emacs/Keybindings and simple usage

From HaskellWiki
< Emacs
Revision as of 18:37, 28 May 2012 by Chrisdone (talk | contribs) (Added note about rebinding C-x C-s.)

Jump to: navigation, search
Emacs for Haskell

Inferior Haskell processes
Automatic unit testing
Automatic building
API searching
Project navigation
Literate programming

Key bindings and usage

Key bindings in haskell-mode (with haskell-indent and inf-haskell.el).

Code editing keys:

  • C-c C-= inserts an = sign and lines up type signatures and other pattern matches nicely.
  • C-c C-| inserts a guard
  • C-c C-o inserts a guard | otherwise = and lines up existing guards
  • C-c C-w inserts a where keyword
  • C-c C-. aligns code over a region in a "sensible" fashion.

Haskell interpreter keys:

  • C-c C-l load current buffers file into Haskell interpreter
  • C-c C-r reload current Haskell interpreter session
  • C-c C-t gets :type for symbol at point, and remembers it
  • C-u C-c C-t inserts a type annotation, for symbol at point, on the line above
  • C-c C-i gets :info for symbol at point
  • C-c M-. find definition of (interpreted) symbol at point
  • C-c C-b or C-c C-z switch to Haskell interpreter (starts one if needed)
  • C-c C-d find haddock documentation about symbol
  • C-c TAB query the haskell interpreter for the info of the given expression
  • C-c C-v check current buffers file with hlint

(See C-h m for more information).


Here's an example for C-c C-=. Put your cursor after myInt and hit C-c C-=

blah :: Int -> Int
blah myInt

note how the function signature is reindented to match the column of the = sign.

blah       :: Int -> Int
blah myInt =

You could also achieve the same effect by selecting the region and typing C-c C-.

You can also use haskell-mode to load Emacs buffers with Haskell code in either Hugs or GHC. To load something in Hugs or ghci, type C-c C-l to load the file. Then, you can go on to type C-c C-r (or simply C-c C-l again) to reload the current module when you have made a change.

Rebind C-x C-s

To do specific actions on save, you need haskell-mode-save-buffer. It is recommended to rebind C-x C-s in haskell-mode to this. Add the following in your haskell-mode-hook.

(define-key haskell-mode-map (kbd "C-x C-s") 'haskell-mode-save-buffer)

Then you're good to go. This will behave the same as normal save-buffer, but with extra goodies if enabled.

Next: Indentation