snippet module
options head
	module ${1:`substitute(substitute(expand('%:r'), '[/\\]','.','g'),'^\%(\l*\.\)\?','','')} exposing (${2:...})
	${0}


snippet import
options head
abbr    import
alias   imp
	import ${1:String}
	${0}


snippet importAs
options head
abbr    import ... as ...
alias   impa
	import ${1} as ${2}
	${0}


snippet importExposing
options head
abbr    import ... exposing (..)
alias   impe
	import ${1:Html} exposing (${2:..})
	${0}


snippet importAsExposing
options head
abbr    import ... as ... exposing (..)
alias   impae
	import ${1:Html} as ${2} exposing (${2:..})
	${0}


snippet main
abbr    main : Program
alias   prog
options head
	main : Program Never ${2:Model} ${3:Msg}
	main =
		${4:Html.}program
			{ init: ${6:( model, Cmd.none )}
			, update: ${7:update}
			, subscriptions: ${8:subscriptions}
			${9:, view: ${10:view\}}
			}
	
	${0}


snippet programWithFlags
abbr    main : Program
alias   progf mainf
options head
	main : Program ${1:Flags} ${2:Model} ${3:Msg}
	main =
		${4:Html.}programWithFlags
			{ init: ${6:initWithFlags}
			, update: ${7:update}
			, subscriptions: ${8:subscriptions}
			${9:, view: ${10:view\}}
			}
	
	${0}


snippet basicProgram
abbr    main : Program
alias   progb mainb
options head
	main : Program Never ${2:Model} ${3:Msg}
	main =
		${4:Html.}beginnerProgram
			{ init: ${6:init}
			, update: ${7:update}
			, subscriptions: ${8:subscriptions}
			${9:, view: ${10:view\}}
			}
	
	${0}


snippet case
abbr    case ... of
	case ${1:#:expression} of
		${2:#:value} ->
			${3:TARGET}


snippet if
abbr    if ... then ... else ...
	if ${1:#:condition} then
		${2}
	else
		${3}


snippet     let
abbr        let ... in ...
options     head
	let
		${1} =
			${2}
	in
		${0}


snippet     lambda
abbr        λ
	\\${1:x} -> ${0}
