diff --git a/etc/soft/nvim/+ftplugin/haskell.vim b/etc/soft/nvim/+ftplugin/haskell.vim
index 6af0832..3223120 100644
--- a/etc/soft/nvim/+ftplugin/haskell.vim
+++ b/etc/soft/nvim/+ftplugin/haskell.vim
@@ -1,63 +1,4 @@
set makeprg=ghc\ %\ -o\ %< " Компилятор
-set foldexpr=HaskellFold(v:lnum)
-set foldmethod=expr
-
-" =============================================================================
-" Descriptions: Provide a function providing folding information for haskell
-" files.
-" Maintainer: Vincent B (twinside@gmail.com)
-" Warning: Assume the presence of type signatures on top of your functions to
-" work well.
-" Usage: drop in ~/vimfiles/plugin or ~/.vim/plugin
-" Version: 1.0
-" Changelog: - 1.0 : initial version
-" =============================================================================
-if exists("g:__HASKELLFOLD_VIM__")
- finish
-endif
-let g:__HASKELLFOLD_VIM__ = 1
-
-" Top level bigdefs
-fun! s:HaskellFoldMaster( line ) "{{{
- return a:line =~ '^data\s'
- \ || a:line =~ '^type\s'
- \ || a:line =~ '^newdata\s'
- \ || a:line =~ '^class\s'
- \ || a:line =~ '^instance\s'
- \ || a:line =~ '^[^:]\+\s*::'
-endfunction "}}}
-
-" Top Level one line shooters.
-fun! s:HaskellSnipGlobal(line) "{{{
- return a:line =~ '^module'
- \ || a:line =~ '^import'
- \ || a:line =~ '^infix[lr]\s'
-endfunction "}}}
-
-" The real folding function
-fun! HaskellFold( lineNum ) "{{{
- let line = getline( a:lineNum )
-
- " Beginning of comment
- if line =~ '^\s*--'
- return 2
- endif
-
- if s:HaskellSnipGlobal( line )
- return 0
- endif
-
- if line =~ '^\s*$'
- let nextline = getline(a:lineNum + 1)
- if s:HaskellFoldMaster( nextline ) > 0 || s:HaskellSnipGlobal( nextline ) > 0
- \ || nextline =~ "^--"
- return 0
- else
- return -1
- endif
- endif
-
- return 1
-endfunction "}}}
+call SetHaskellFolding()
diff --git a/etc/soft/nvim/+plugins/haskell-vim b/etc/soft/nvim/+plugins/haskell-vim
new file mode 160000
index 0000000..b1ac468
--- /dev/null
+++ b/etc/soft/nvim/+plugins/haskell-vim
@@ -0,0 +1 @@
+Subproject commit b1ac46807835423c4a4dd063df6d5b613d89c731
diff --git a/etc/soft/nvim/+plugins/vim-haskellConcealPlus/README.md b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/README.md
new file mode 100644
index 0000000..04c3a31
--- /dev/null
+++ b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/README.md
@@ -0,0 +1,147 @@
+## Vim Haskell Conceal+
+
+This bundle provides extended Haskell Conceal feature for Vim. The feature
+is used to display unicode operators in Haskell code without changing the
+underlying file.
+
+This package offers more (and, more importantly, configurable) features
+than the
+[baseline vim-haskellConcealbundle](https://github.com/Twinside/vim-haskellConceal).
+The baseline bundle has numerous forks, which is possible to combine, so
+everyone is welcome to share, improve or contribute new notations to this
+Conceal Plus package.
+
+GitHub: https://github.com/enomsg/vim-haskellConcealPlus
+
+### Why Concealing
+
+- Using things like '->' instead real arrows '→' was never a deliberate
+ choice, but a choice made due to limitations of teletypewriters and
+ input inconvenience.
+
+- With concealing you don't have to deal with cumbersome unicode-input
+ methods, yet you can enjoy proper notation.
+
+- It is not only about aesthetics. Excess of multi-character functions may
+ create visual noise, which negatively affects readability. Using special
+ symbols and true arrows, together with colors and bold/italic face seems
+ to improve the situation. The image shows Vim with and without
+ concealing, both running in a plain terminal emulator:
+
+
+
+- Using concealing instead of *-unicode* versions of packages also has
+ some advantages. Mainly, concealing does not require any changes to the
+ source code, it is backwards-compatible with idiomatic code. Secondly,
+ with concealing no special input methods are needed. Plus, currently
+ some features are hardly possible without editor's concealing (e.g.
+ power superscripts).
+
+### Installation
+
+Using Vim built-in `pack` support:
+
+```
+$ mkdir -p ~/.vim/pack/vim-haskellConcealPlus/start
+$ cd ~/.vim/pack/vim-haskellConcealPlus/start
+$ git clone https://github.com/enomsg/vim-haskellConcealPlus
+$ echo "syn on" >> ~/.vimrc # If not already in .vimrc
+$ echo "setlocal conceallevel=2" >> ~/.vimrc # If not already in .vimrc
+$ echo "set concealcursor=nciv" >> ~/.vimrc # Optional
+```
+
+### Available Options
+
+ 'q' option to disable concealing of scientific constants (e.g. π)
+ '℘' option to disable concealing of powerset function
+ '𝐒' option to disable String type to 𝐒 concealing
+ '𝐓' option to disable Text type to 𝐓 concealing
+ '𝐄' option to disable Either/Right/Left to 𝐄/𝑅/𝐿 concealing
+ '𝐌' option to disable Maybe/Just/Nothing to 𝐌/𝐽/𝑁 concealing
+ 'A' option to not try to preserve indentation
+ 's' option to disable space consumption after ∑,∏,√ and ¬ functions
+ '*' option to enable concealing of asterisk with '⋅' sign
+ 'x' option to disable default concealing of asterisk with '×' sign
+ 'E' option to enable ellipsis concealing with ‥ (two dot leader)
+ 'e' option to disable ellipsis concealing with … (ellipsis sign)
+ '⇒' option to disable `implies` concealing with ⇒
+ '⇔' option to disable `iff` concealing with ⇔
+ 'r' option to disable return (η) and join (µ) concealing
+ 'b' option to disable bind (left and right) concealing
+ 'f' option to enable formal (★) right bind concealing
+ 'c' option to enable encircled b/d (ⓑ/ⓓ) for right and left binds
+ 'h' option to enable partial concealing of binds (e.g. »=)
+ 'C' option to enable encircled 'm' letter ⓜ concealing for fmap
+ 'l' option to disable fmap/lift concealing with ↥
+ '↱' option to disable mapM/forM concealing with ↱/↰
+ 'w' option to disable 'where' concealing with "due to"/∵ symbol
+ '-' option to disable subtract/(-) concealing with ⊟
+ 'I' option to enable alternative ':+' concealing with with ⨢
+ 'i' option to disable default concealing of ':+' with ⅈ
+ 'R' option to disable realPart/imagPart concealing with ℜ/ℑ
+ 'T' option to enable True/False constants concealing with bold 𝐓/𝐅
+ 't' option to disable True/False constants concealing with italic 𝑇/𝐹
+ 'B' option to disable Bool type to 𝔹 concealing
+ 'Q' option to disable Rational type to ℚ concealing
+ 'Z' option to disable Integer type to ℤ concealing
+ 'N' option to disable Natural, Nat types to ℕ concealing
+ 'D' option to disable Double type to 𝔻 concealing
+ 'C' option to disable Complex type to ℂ concealing
+ '1' option to disable numeric superscripts concealing, e.g. x²
+ 'a' option to disable alphabet superscripts concealing, e.g. xⁿ
+
+The flags can be specified via hscoptions variable. For example, *let
+hscoptions="fc"* in your *~/.vimrc*.
+
+### Known Issues and Hints:
+
+- Concealing may seriously mess up indentation. By default the bundle
+ tries to preserve spaces for commonly troublesome symbols (e.g. ->, <-
+ and => arrows). But to be sure about indentation, you still have to see
+ the non-concealed code. *set conceallevel=0* might be handy in these
+ cases.
+
+- *set concealcursor=nciv* seem to not play well with Vim matchparen
+ feature (which is enabled by default). You can either disable concealing
+ under the cursor, or disable matchparen by adding *let
+ loaded_matchparen=1* at the very top of your *~/.vimrc*.
+
+- With *set concealcursor=nciv* navigation through concealed parts of code
+ might be somewhat irritating because the cursor behaves a bit
+ differently. It becomes less of an issue if you are used to Vim's *w/b*
+ commands (word forward/backward). You can also try *set
+ concealcursor=ncv* instead.
+
+- Finding proper fonts might be a pain. Most of modern, so called
+ programming fonts (*Inconsolata*, *Anonymous Pro*, etc.) often lack
+ decent unicode support. As a recommendation, try *DejaVu Sans Mono*.
+
+ **Update**: thanks to [monospacifier](https://github.com/cpitclaudel/monospacifier)
+ package, fonts are no longer a problem. Pick your favourite font, then in
+ addition download one of the "monospacified" fallback fonts, save into
+ `~/.fonts`, and adjust fontconfig, e.g.
+ `~/.config/fontconfig/fonts.conf`:
+
+ ```
+
+
+ ~/.fonts
+
+ monospace
+
+ TeX Gyre Schola Math monospacified for DejaVu Sans Mono
+
+
+
+ ```
+
+- Most of the terminal emulators have one or more issues with regard to the
+ unicode characters handling. Emulators that don't have problems with unicode
+ might be pretty slow. As a recommendation, try xst, or *evilvte* (it has weird
+ configuration, but draws things correctly) or *lxterminal* (seems to be quite
+ capable, but limited configurability) or any other terminal emulator that
+ happened to work for you.
+
+ [xst](https://github.com/gnotclub/xst) is known to work well with DejaVu Sans
+ Mono, plus [monospacified](https://github.com/cpitclaudel/monospacifier) fonts
+ as a fallback.
diff --git a/etc/soft/nvim/+plugins/vim-haskellConcealPlus/after/syntax/haskell.vim b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/after/syntax/haskell.vim
new file mode 100644
index 0000000..693af6a
--- /dev/null
+++ b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/after/syntax/haskell.vim
@@ -0,0 +1,483 @@
+" vim: sw=4
+"=============================================================================
+" What Is This: Add some conceal operator for your haskell files
+" File: haskell.vim (conceal enhancement)
+" Last Change: 2011-09-07
+" Version: 1.3.2
+" Require:
+" set nocompatible
+" somewhere on your .vimrc
+"
+" Vim 7.3 or Vim compiled with conceal patch.
+" Use --with-features=big or huge in order to compile it in.
+"
+" Usage:
+" Drop this file in your
+" ~/.vim/after/syntax folder (Linux/MacOSX/BSD...)
+" ~/vimfiles/after/syntax folder (Windows)
+"
+" For this script to work, you have to set the encoding
+" to utf-8 :set enc=utf-8
+"
+" Additional:
+" * if you want to avoid the loading, add the following
+" line in your .vimrc :
+" let g:no_haskell_conceal = 1
+" Changelog:
+" - 1.3.1: putting undefined in extra conceal, not appearing on windows
+" - 1.3: adding new arrow characters used by GHC in Unicode extension.
+" - 1.2: Fixing conceal level to be local (thx Erlend Hamberg)
+" - 1.1: Better handling of non utf-8 systems, and avoid some
+" concealing operations on windows on some fonts
+"
+
+" Cf - check a flag. Return true if the flag is specified.
+function! Cf(flag)
+ return exists('g:hscoptions') && stridx(g:hscoptions, a:flag) >= 0
+endfunction
+
+if exists('g:no_haskell_conceal') || !has('conceal') || &enc != 'utf-8'
+ finish
+endif
+
+" vim: set fenc=utf-8:
+syntax match hsNiceOperator "\\\ze[[:alpha:][:space:]_([]" conceal cchar=λ
+
+" 'q' option to disable concealing of scientific constants (e.g. π).
+if !Cf('q')
+ syntax match hsNiceOperator "\" conceal cchar=π
+ syntax match hsNiceOperator "\" conceal cchar=τ
+ syntax match hsNiceOperator "\" conceal cchar=ℎ
+ syntax match hsNiceOperator "\" conceal cchar=ℏ
+endif
+
+syntax match hsNiceOperator "==" conceal cchar=≡
+syntax match hsNiceOperator "\/=" conceal cchar=≢
+
+let s:extraConceal = 1
+" Some windows font don't support some of the characters,
+" so if they are the main font, we don't load them :)
+if has("win32")
+ let s:incompleteFont = [ 'Consolas'
+ \ , 'Lucida Console'
+ \ , 'Courier New'
+ \ ]
+ let s:mainfont = substitute( &guifont, '^\([^:,]\+\).*', '\1', '')
+ for s:fontName in s:incompleteFont
+ if s:mainfont ==? s:fontName
+ let s:extraConceal = 0
+ break
+ endif
+ endfor
+endif
+
+if s:extraConceal
+ syntax match hsNiceOperator "\" conceal cchar=⊥
+
+ " Match greater than and lower than w/o messing with Kleisli composition
+ syntax match hsNiceOperator "<=\ze[^<]" conceal cchar=≤
+ syntax match hsNiceOperator ">=\ze[^>]" conceal cchar=≥
+
+ " Redfining to get proper '::' concealing
+ syntax match hs_DeclareFunction /^[a-z_(]\S*\(\s\|\n\)*::/me=e-2 nextgroup=hsNiceOperator contains=hs_FunctionName,hs_OpFunctionName
+
+ syntax match hsNiceoperator "!!" conceal cchar=‼
+ syntax match hsNiceoperator "++\ze[^+]" conceal cchar=⧺
+ syntax match hsNiceOperator "\" conceal cchar=∀
+ syntax match hsNiceOperator "-<" conceal cchar=↢
+ syntax match hsNiceOperator ">-" conceal cchar=↣
+ syntax match hsNiceOperator "-<<" conceal cchar=⤛
+ syntax match hsNiceOperator ">>-" conceal cchar=⤜
+ " the star does not seem so good...
+ " syntax match hsNiceOperator "*" conceal cchar=★
+ syntax match hsNiceOperator "`div`" conceal cchar=÷
+
+ " Only replace the dot, avoid taking spaces around.
+ syntax match hsNiceOperator /\s\.\s/ms=s+1,me=e-1 conceal cchar=∘
+
+ syntax match hsQQEnd "|\]" contained conceal cchar=〛
+ " sy match hsQQEnd "|\]" contained conceal=〚
+
+ syntax match hsNiceOperator "`elem`" conceal cchar=∈
+ syntax match hsNiceOperator "`notElem`" conceal cchar=∉
+ syntax match hsNiceOperator "`isSubsetOf`" conceal cchar=⊆
+ syntax match hsNiceOperator "`union`" conceal cchar=∪
+ syntax match hsNiceOperator "`intersect`" conceal cchar=∩
+ syntax match hsNiceOperator "\\\\\ze[[:alpha:][:space:]_([]" conceal cchar=∖
+
+ syntax match hsNiceOperator "||\ze[[:alpha:][:space:]_([]" conceal cchar=∨
+ syntax match hsNiceOperator "&&\ze[[:alpha:][:space:]_([]" conceal cchar=∧
+
+ syntax match hsNiceOperator "<\*>" conceal cchar=⊛
+ syntax match hsNiceOperator "`mappend`" conceal cchar=⊕
+ syntax match hsNiceOperator "\" conceal cchar=⊕
+ syntax match hsNiceOperator "<>" conceal cchar=⊕
+ syntax match hsNiceOperator "\" conceal cchar=∅
+ syntax match hsNiceOperator "\" conceal cchar=∅
+ syntax match hsNiceOperator "\" conceal cchar=∅
+endif
+
+hi link hsNiceOperator Operator
+hi! link Conceal Operator
+setlocal conceallevel=2
+
+" '℘' option to disable concealing of powerset function
+if !Cf('℘')
+ syntax match hsNiceOperator "\" conceal cchar=℘
+endif
+
+" '𝐒' option to disable String type to 𝐒 concealing
+if !Cf('𝐒')
+ syntax match hsNiceOperator "\" conceal cchar=𝐒
+endif
+
+" '𝐓' option to disable Text type to 𝐓 concealing
+if !Cf('𝐓')
+ syntax match hsNiceOperator "\" conceal cchar=𝐓
+endif
+
+" '𝐄' option to disable Either/Right/Left to 𝐄/𝑅/𝐿 concealing
+if !Cf('𝐄')
+ syntax match hsNiceOperator "\" conceal cchar=𝐄
+ syntax match hsNiceOperator "\" conceal cchar=𝑅
+ syntax match hsNiceOperator "\" conceal cchar=𝐿
+endif
+
+" '𝐌' option to disable Maybe/Just/Nothing to 𝐌/𝐽/𝑁 concealing
+if !Cf('𝐌')
+ syntax match hsNiceOperator "\" conceal cchar=𝐌
+ syntax match hsNiceOperator "\" conceal cchar=𝐽
+ syntax match hsNiceOperator "\" conceal cchar=𝑁
+endif
+
+" 'A' option to not try to preserve indentation.
+if Cf('A')
+ syntax match hsNiceOperator "<-" conceal cchar=←
+ syntax match hsNiceOperator "->" conceal cchar=→
+ syntax match hsNiceOperator "=>" conceal cchar=⇒
+ syntax match hsNiceOperator "\:\:" conceal cchar=∷
+else
+ syntax match hsLRArrowHead contained ">" conceal cchar=
+ syntax match hsLRArrowTail contained "-" conceal cchar=→
+ syntax match hsLRArrowFull "->" contains=hsLRArrowHead,hsLRArrowTail
+
+ syntax match hsRLArrowHead contained "<" conceal cchar=←
+ syntax match hsRLArrowTail contained "-" conceal cchar=
+ syntax match hsRLArrowFull "<-" contains=hsRLArrowHead,hsRLArrowTail
+
+ syntax match hsLRDArrowHead contained ">" conceal cchar=
+ syntax match hsLRDArrowTail contained "=" conceal cchar=⇒
+ syntax match hsLRDArrowFull "=>" contains=hsLRDArrowHead,hsLRDArrowTail
+endif
+
+" 's' option to disable space consumption after ∑,∏,√ and ¬ functions.
+if Cf('s')
+ syntax match hsNiceOperator "\" conceal cchar=∑
+ syntax match hsNiceOperator "\" conceal cchar=∏
+ syntax match hsNiceOperator "\" conceal cchar=√
+ syntax match hsNiceOperator "\" conceal cchar=¬
+else
+ syntax match hsNiceOperator "\\(\ze\s*[.$]\|\s*\)" conceal cchar=∑
+ syntax match hsNiceOperator "\\(\ze\s*[.$]\|\s*\)" conceal cchar=∏
+ syntax match hsNiceOperator "\\(\ze\s*[.$]\|\s*\)" conceal cchar=√
+ syntax match hsNiceOperator "\\(\ze\s*[.$]\|\s*\)" conceal cchar=¬
+endif
+
+" '*' option to enable concealing of asterisk with '⋅' sign.
+if Cf('*')
+ syntax match hsNiceOperator "*" conceal cchar=⋅
+" 'x' option to disable default concealing of asterisk with '×' sign.
+elseif !Cf('x')
+ syntax match hsNiceOperator "*" conceal cchar=×
+endif
+
+" 'E' option to enable ellipsis concealing with ‥ (two dot leader).
+if Cf('E')
+ " The two dot leader is not guaranteed to be at the bottom. So, it
+ " will break on some fonts.
+ syntax match hsNiceOperator "\.\." conceal cchar=‥
+" 'e' option to disable ellipsis concealing with … (ellipsis sign).
+elseif !Cf('e')
+ syntax match hsNiceOperator "\.\." conceal cchar=…
+end
+
+" '⇒' option to disable `implies` concealing with ⇒
+if !Cf('⇒')
+ " Easily distinguishable from => keyword since the keyword can only be
+ " used in type signatures.
+ syntax match hsNiceOperator "`implies`" conceal cchar=⇒
+endif
+
+" '⇔' option to disable `iff` concealing with ⇔
+if !Cf('⇔')
+ syntax match hsNiceOperator "`iff`" conceal cchar=⇔
+endif
+
+" 'r' option to disable return (η) and join (µ) concealing.
+if !Cf('r')
+ syntax match hsNiceOperator "\" conceal cchar=η
+ syntax match hsNiceOperator "\" conceal cchar=µ
+endif
+
+" 'b' option to disable bind (left and right) concealing
+if Cf('b')
+ " Vim has some issues concealing with composite symbols like '«̳', and
+ " unfortunately there is no other common short notation for both
+ " binds. So 'b' option to disable bind concealing altogether.
+" 'f' option to enable formal (★) right bind concealing
+elseif Cf('f')
+ syntax match hsNiceOperator ">>=" conceal cchar=★
+" 'c' option to enable encircled b/d (ⓑ/ⓓ) for right and left binds.
+elseif Cf('c')
+ syntax match hsNiceOperator ">>=" conceal cchar=ⓑ
+ syntax match hsNiceOperator "=<<" conceal cchar=ⓓ
+" 'h' option to enable partial concealing of binds (e.g. »=).
+elseif Cf('h')
+ syntax match hsNiceOperator ">>" conceal cchar=»
+ syntax match hsNiceOperator "<<" conceal cchar=«
+ syntax match hsNiceOperator "=\zs<<" conceal cchar=«
+" Left and right arrows with hooks are the default option for binds.
+else
+ syntax match hsNiceOperator ">>=\ze\_[[:alpha:][:space:]_()[\]]" conceal cchar=↪
+ syntax match hsNiceOperator "=<<\ze\_[[:alpha:][:space:]_()[\]]" conceal cchar=↩
+endif
+
+if !Cf('h')
+ syntax match hsNiceOperator ">>\ze\_[[:alpha:][:space:]_()[\]]" conceal cchar=»
+ syntax match hsNiceOperator "<<\ze\_[[:alpha:][:space:]_()[\]]" conceal cchar=«
+endif
+
+" 'C' option to enable encircled 'm' letter ⓜ concealing for fmap.
+if Cf('C')
+ syntax match hsNiceOperator "<$>" conceal cchar=ⓜ
+ syntax match hsNiceOperator "`fmap`" conceal cchar=ⓜ
+" 'l' option to disable fmap/lift concealing with ↥.
+elseif !Cf('l')
+ syntax match hsNiceOperator "`liftM`" conceal cchar=↥
+ syntax match hsNiceOperator "`liftA`" conceal cchar=↥
+ syntax match hsNiceOperator "`fmap`" conceal cchar=↥
+ syntax match hsNiceOperator "<$>" conceal cchar=↥
+
+ syntax match LIFTQ contained "`" conceal
+ syntax match LIFTQl contained "l" conceal cchar=↥
+ syntax match LIFTl contained "l" conceal cchar=↥
+ syntax match LIFTi contained "i" conceal
+ syntax match LIFTf contained "f" conceal
+ syntax match LIFTt contained "t" conceal
+ syntax match LIFTA contained "A" conceal
+ syntax match LIFTM contained "M" conceal
+ syntax match LIFT2 contained "2" conceal cchar=²
+ syntax match LIFT3 contained "3" conceal cchar=³
+ syntax match LIFT4 contained "4" conceal cchar=⁴
+ syntax match LIFT5 contained "5" conceal cchar=⁵
+
+ syntax match hsNiceOperator "`liftM2`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT2
+ syntax match hsNiceOperator "`liftM3`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT3
+ syntax match hsNiceOperator "`liftM4`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT4
+ syntax match hsNiceOperator "`liftM5`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT5
+ syntax match hsNiceOperator "`liftA2`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTA,LIFT2
+ syntax match hsNiceOperator "`liftA3`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTA,LIFT3
+
+ syntax match FMAPf contained "f" conceal cchar=↥
+ syntax match FMAPm contained "m" conceal
+ syntax match FMAPa contained "a" conceal
+ syntax match FMAPp contained "p" conceal
+ syntax match FMAPSPC contained " " conceal
+ syntax match hsNiceOperator "\\s*" contains=FMAPf,FMAPm,FMAPa,FMAPp,FMAPSPC
+
+ syntax match LIFTSPC contained " " conceal
+ syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTA,LIFTSPC
+ syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTA,LIFT2,LIFTSPC
+ syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTA,LIFT3,LIFTSPC
+
+ syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFTSPC
+ syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT2,LIFTSPC
+ syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT3,LIFTSPC
+ syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT4,LIFTSPC
+ syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT5,LIFTSPC
+
+ " TODO: Move liftIO to its own flag?
+ syntax match LIFTIOL contained "l" conceal
+ syntax match LIFTI contained "I" conceal cchar=i
+ syntax match LIFTO contained "O" conceal cchar=o
+ syntax match hsNiceOperator "\" contains=LIFTIOl,LIFTi,LIFTf,LIFTt,LIFTI,LIFTO
+endif
+
+" '↱' option to disable mapM/forM concealing with ↱/↰
+if !Cf('↱')
+ syntax match MAPMQ contained "`" conceal
+ syntax match MAPMm contained "m" conceal cchar=↱
+ syntax match MAPMmQ contained "m" conceal cchar=↰
+ syntax match MAPMa contained "a" conceal
+ syntax match MAPMp contained "p" conceal
+ syntax match MAPMM contained "M" conceal
+ syntax match MAPMM contained "M" conceal
+ syntax match MAPMU contained "_" conceal cchar=_
+ syntax match SPC contained " " conceal
+ syntax match hsNiceOperator "`mapM_`" contains=MAPMQ,MAPMmQ,MAPMa,MAPMp,MAPMM,MAPMU
+ syntax match hsNiceOperator "`mapM`" contains=MAPMQ,MAPMmQ,MAPMa,MAPMp,MAPMM
+ syntax match hsNiceOperator "\\s*" contains=MAPMm,MAPMa,MAPMp,MAPMM,SPC
+ syntax match hsNiceOperator "\\s*" contains=MAPMm,MAPMa,MAPMp,MAPMM,MAPMU,SPC
+
+ syntax match FORMQ contained "`" conceal
+ syntax match FORMfQ contained "f" conceal cchar=↱
+ syntax match FORMf contained "f" conceal cchar=↰
+ syntax match FORMo contained "o" conceal
+ syntax match FORMr contained "r" conceal
+ syntax match FORMM contained "M" conceal
+ syntax match FORMU contained "_" conceal cchar=_
+
+ syntax match hsNiceOperator "`forM`" contains=FORMQ,FORMfQ,FORMo,FORMr,FORMM
+ syntax match hsNiceOperator "`forM_`" contains=FORMQ,FORMfQ,FORMo,FORMr,FORMM,FORMU
+
+ syntax match hsNiceOperator "\