snippet lang
	{-# LANGUAGE ${1:OverloadedStrings} #-}
snippet info
	-- |
	-- Module      :  ${1:Module.Namespace}
	-- Copyright   :  ${2:Author} ${3:2011-2012}
	-- License     :  ${4:BSD3}
	--
	-- Maintainer  :  ${5:email@something.com}
	-- Stability   :  ${6:experimental}
	-- Portability :  ${7:unknown}
	--
	-- ${8:Description}
	--
snippet import
	import           ${1:Data.Text}
snippet import2
	import           ${1:Data.Text} (${2:head})
snippet importq
	import qualified ${1:Data.Text} as ${2:T}
snippet inst
	instance ${1:Monoid} ${2:Type} where
		${3}
snippet type
	type ${1:Type} = ${2:Type}
snippet data
	data ${1:Type} = ${2:$1} ${3:Int}
snippet newtype
	newtype ${1:Type} = ${2:$1} ${3:Int}
snippet class
	class ${1:Class} a where
		${2}
snippet module
	module `substitute(substitute(expand('%:r'), '[/\\]','.','g'),'^\%(\l*\.\)\?','','')` (
	)	where
	`expand('%') =~ 'Main' ? "\n\nmain = do\n  print \"hello world\"" : ""`

snippet const
	${1:name} :: ${2:a}
	$1 = ${3:undefined}
snippet fn
	${1:fn} :: ${2:a} -> ${3:a}
	$1 ${4} = ${5:undefined}
snippet fn2
	${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}
	$1 ${5} = ${6:undefined}
snippet ap
	${1:map} ${2:fn} ${3:list}
snippet do
	do

snippet λ
	\${1:x} -> ${2}
snippet \
	\${1:x} -> ${2}
snippet <-
	${1:a} <- ${2:m a}
snippet ←
	${1:a} <- ${2:m a}
snippet ->
	${1:m a} -> ${2:a}
snippet →
	${1:m a} -> ${2:a}
snippet tup
	(${1:a}, ${2:b})
snippet tup2
	(${1:a}, ${2:b}, ${3:c})
snippet tup3
	(${1:a}, ${2:b}, ${3:c}, ${4:d})
snippet rec
	${1:Record} { ${2:recFieldA} = ${3:undefined}
				, ${4:recFieldB} = ${5:undefined}
				}
snippet case
	case ${1:something} of
		${2} -> ${3}
snippet let
	let ${1} = ${2}
	in ${3}
snippet where
	where
		${1:fn} = ${2:undefined}
