https://github.com/haskell/haskell-snippets.git
git clone 'git://github.com/haskell/haskell-snippets.git'
Haskell-Snippets is a collection of YASnippet Haskell snippets for Emacs.
Enable the Emacs package manager and make sure the melpa package repository is set up.
(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
M-x package-install haskell-snippets
Add the following to your Emacs config:
(require 'haskell-snippets)
Snippets may have to be recompiled and reloaded in Emacs if YASnippet is already in use:
M-x yas-recompile-all M-x yas-reload-all
Haskell snippts should now be available to use! In a haskell-mode
buffer, type fn<TAB>
. A prompt should appear asking which fn
snippet to expand.
I highly recommend using YASnippet with ido-mode. Configure Emacs:
(setq-default yas-prompt-functions '(yas-ido-prompt yas-dropdown-prompt))
This is important so that alternatives (like import
vs. import
qualified
) can quickly be selected with a single key stroke.
new
- newtypemod
- module [simple, exports]main
- main module and functionlet
- let bindingslang
- language extension pragmasopt
- GHC options pragmas\
- lambda functioninst
- instance declairationimp
- import modules [simple, qualified]if
- if conditional [inline, block]<-
- monadic getfn
- top level function [simple, guarded, clauses]data
- data type definition [inline, record]=>
- type constraint{-
- block commentcase
- case statementKeep snippet keys (the prefix used to auto-complete) to four characters or less while still being as easy to guess as possible.
Have as few keys as possible. The more keys there are to remember, the harder snippets are to use and learn.
Leverage ido-mode when reasonable. For instance, to keep the
number of snippet keys to a minimum as well as auto complete things
like Haskell Langauge Extension Pragmas. When
multiple snippets share a key (ex: fn
), the ido-mode
prompts are
unique to one character (ex: guarded function
and simple
function
are g
and s
respectively).
This code is written and maintained by Luke Hoersten, mailto:luke@hoersten.org.