From 05509aa8d316f8019e706619b2b5c61117957f19 Mon Sep 17 00:00:00 2001 From: Maxim Likhachev Date: Sun, 26 Jul 2020 21:24:17 +0300 Subject: [PATCH] vim: haskell --- etc/soft/nvim/+ftplugin/haskell.vim | 61 +-- etc/soft/nvim/+plugins/haskell-vim | 1 + etc/soft/nvim/+plugins/vim-haskellConceal/README | 11 - .../vim-haskellConceal/after/syntax/haskell.vim | 103 ---- .../nvim/+plugins/vim-haskellConcealPlus/README.md | 147 ++++++ .../after/syntax/haskell.vim | 483 +++++++++++++++++ .../after/syntax/lhaskell.vim | 477 +++++++++++++++++ .../nvim/+plugins/vim-haskellConcealPlus/demo.hs | 46 ++ .../nvim/+plugins/vim-haskellConcealPlus/demo.lhs | 90 ++++ .../nvim/+plugins/vim-haskellConcealPlus/demo.png | Bin 0 -> 185386 bytes .../+plugins/vim-haskellConcealPlus/gendemo.sh | 6 + .../vim-haskellConcealPlus/tests/test-with-pack.sh | 38 ++ .../tests/test-with-pathogen.sh | 37 ++ etc/soft/nvim/+plugins/vim-haskellfold/README.md | 14 + .../vim-haskellfold/autoload/haskellFold.vim | 121 +++++ .../+plugins/vim-haskellfold/ftplugin/haskell.vim | 1 + .../vim-haskellfold/plugin/haskellFold.vim | 11 + .../+plugins_disabled/vim-haskellConceal/README | 11 + .../vim-haskellConceal/after/syntax/haskell.vim | 103 ++++ etc/soft/nvim/ftdetect/detect.vim | 11 +- etc/soft/nvim/syntax/haskell.vim | 577 --------------------- etc/soft/nvim/vimrc | 84 ++- 22 files changed, 1657 insertions(+), 776 deletions(-) create mode 160000 etc/soft/nvim/+plugins/haskell-vim delete mode 100644 etc/soft/nvim/+plugins/vim-haskellConceal/README delete mode 100644 etc/soft/nvim/+plugins/vim-haskellConceal/after/syntax/haskell.vim create mode 100644 etc/soft/nvim/+plugins/vim-haskellConcealPlus/README.md create mode 100644 etc/soft/nvim/+plugins/vim-haskellConcealPlus/after/syntax/haskell.vim create mode 100644 etc/soft/nvim/+plugins/vim-haskellConcealPlus/after/syntax/lhaskell.vim create mode 100644 etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.hs create mode 100644 etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.lhs create mode 100644 etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.png create mode 100755 etc/soft/nvim/+plugins/vim-haskellConcealPlus/gendemo.sh create mode 100755 etc/soft/nvim/+plugins/vim-haskellConcealPlus/tests/test-with-pack.sh create mode 100755 etc/soft/nvim/+plugins/vim-haskellConcealPlus/tests/test-with-pathogen.sh create mode 100644 etc/soft/nvim/+plugins/vim-haskellfold/README.md create mode 100644 etc/soft/nvim/+plugins/vim-haskellfold/autoload/haskellFold.vim create mode 100644 etc/soft/nvim/+plugins/vim-haskellfold/ftplugin/haskell.vim create mode 100644 etc/soft/nvim/+plugins/vim-haskellfold/plugin/haskellFold.vim create mode 100644 etc/soft/nvim/+plugins_disabled/vim-haskellConceal/README create mode 100644 etc/soft/nvim/+plugins_disabled/vim-haskellConceal/after/syntax/haskell.vim delete mode 100644 etc/soft/nvim/syntax/haskell.vim 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-haskellConceal/README b/etc/soft/nvim/+plugins/vim-haskellConceal/README deleted file mode 100644 index d2bf6b2..0000000 --- a/etc/soft/nvim/+plugins/vim-haskellConceal/README +++ /dev/null @@ -1,11 +0,0 @@ -Use Vim 7.3 Conceal feature to display unicode operator -in Haskell without changing the underlying file. - -GitHub: https://github.com/Twinside/vim-haskellConceal - -## Installation - -Decompress in your ~/vimfiles or ~/.vim, if you're using -pathogen (you should), put it in ~/.vim/bundle/haskellConceal -folder - diff --git a/etc/soft/nvim/+plugins/vim-haskellConceal/after/syntax/haskell.vim b/etc/soft/nvim/+plugins/vim-haskellConceal/after/syntax/haskell.vim deleted file mode 100644 index 7b99908..0000000 --- a/etc/soft/nvim/+plugins/vim-haskellConceal/after/syntax/haskell.vim +++ /dev/null @@ -1,103 +0,0 @@ -"============================================================================= -" What Is This: Add some conceal operator for your haskell files -" File: haskell.vim (conceal enhancement) -" Author: Vincent Berthoux -" 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 -" -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=λ -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=√ -syntax match hsNiceOperator "\" conceal cchar=π -syntax match hsNiceOperator "==" conceal cchar=≡ -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=≥ - - syntax match hsNiceOperator "=>" conceal cchar=⇒ - syntax match hsNiceOperator "=\zs<<" 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 "++" 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=★ - - " Only replace the dot, avoid taking spaces around. - syntax match hsNiceOperator /\s\.\s/ms=s+1,me=e-1 conceal cchar=∘ - syntax match hsNiceOperator "\.\." 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=∉ -endif - -hi link hsNiceOperator Operator -hi! link Conceal Operator -setlocal conceallevel=2 - 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: + +![demo](https://github.com/enomsg/vim-haskellConcealPlus/raw/master/demo.png) + +- 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 "\\s*" contains=FORMf,FORMo,FORMr,FORMM,SPC + syntax match hsNiceOperator "\\s*" contains=FORMf,FORMo,FORMr,FORMM,FORMU,SPC +endif + +" 'w' option to disable 'where' concealing with "due to"/∵ symbol. +if !Cf('w') + " ∵ means "because/since/due to." With quite a stretch this can be + " used for 'where'. We preserve spacing, otherwise it breaks indenting + " in a major way. + syntax match WS contained "w" conceal cchar=∵ + syntax match HS contained "h" conceal cchar= + syntax match ES contained "e" conceal cchar= + syntax match RS contained "r" conceal cchar= + syntax match hsNiceOperator "\" contains=WS,HS,ES,RS,ES +endif + +" '-' option to disable subtract/(-) concealing with ⊟. +if !Cf('-') + " Minus is a special syntax construct in Haskell. We use squared minus to + " tell the syntax from the binary function. + syntax match hsNiceOperator "(-)" conceal cchar=⊟ + syntax match hsNiceOperator "`subtract`" conceal cchar=⊟ +endif + +" 'I' option to enable alternative ':+' concealing with with ⨢. +if Cf('I') + " With some fonts might look better than ⅈ. + syntax match hsNiceOperator ":+" conceal cchar=⨢ +" 'i' option to disable default concealing of ':+' with ⅈ. +elseif !Cf('i') + syntax match COLON contained ":" conceal cchar=+ + syntax match PLUS contained "+" conceal cchar= + syntax match SPACE contained " " conceal cchar=ⅈ + syntax match hsNiceOperator ":+ " contains=COLON,PLUS,SPACE + "syntax match hsNiceOperator ":+" conceal cchar=ⅈ +endif + +" 'R' option to disable realPart/imagPart concealing with ℜ/ℑ. +if !Cf('R') + syntax match hsNiceOperator "\" conceal cchar=ℜ + syntax match hsNiceOperator "\" conceal cchar=ℑ +endif + +" 'T' option to enable True/False constants concealing with bold 𝐓/𝐅. +if Cf('T') + syntax match hsNiceSpecial "\" conceal cchar=𝐓 + syntax match hsNiceSpecial "\" conceal cchar=𝐅 +" 't' option to disable True/False constants concealing with italic 𝑇/𝐹. +elseif !Cf('t') + syntax match hsNiceSpecial "\" conceal cchar=𝑇 + syntax match hsNiceSpecial "\" conceal cchar=𝐹 +endif + +" 'B' option to disable Bool type to 𝔹 concealing +if !Cf('B') + " Not an official notation ttbomk. But at least + " http://www.haskell.org/haskellwiki/Unicode-symbols mentions it. + syntax match hsNiceOperator "\" conceal cchar=𝔹 +endif + +" 'Q' option to disable Rational type to ℚ concealing. +if !Cf('Q') + syntax match hsNiceOperator "\" conceal cchar=ℚ +endif + +" 'Z' option to disable Integer type to ℤ concealing. +if !Cf('Z') + syntax match hsNiceOperator "\" conceal cchar=ℤ + syntax match hsNiceOperator "\" conceal cchar=ℤ +endif + +" 'N' option to disable Natural, Nat types to ℕ concealing. +if !Cf('N') + syntax match hsNiceOperator "\" conceal cchar=ℕ + syntax match hsNiceOperator "\" conceal cchar=ℕ +endif + +" 'D' option to disable Double type to 𝔻 concealing +if !Cf('D') + syntax match hsNiceOperator "\" conceal cchar=𝔻 +endif + +" 'C' option to disable Complex type to ℂ concealing +if !Cf('C') + syntax match hasNiceOperator "\" conceal cchar=ℂ +endif + +" '1' option to disable numeric superscripts concealing, e.g. x². +if !Cf('1') + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)0\ze\_W" conceal cchar=⁰ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)1\ze\_W" conceal cchar=¹ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)2\ze\_W" conceal cchar=² + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)3\ze\_W" conceal cchar=³ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)4\ze\_W" conceal cchar=⁴ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)5\ze\_W" conceal cchar=⁵ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)6\ze\_W" conceal cchar=⁶ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)7\ze\_W" conceal cchar=⁷ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)8\ze\_W" conceal cchar=⁸ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)9\ze\_W" conceal cchar=⁹ +endif + +" 'a' option to disable alphabet superscripts concealing, e.g. xⁿ. +if !Cf('a') + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)a\ze\_W" conceal cchar=ᵃ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)b\ze\_W" conceal cchar=ᵇ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)c\ze\_W" conceal cchar=ᶜ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)d\ze\_W" conceal cchar=ᵈ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)e\ze\_W" conceal cchar=ᵉ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)f\ze\_W" conceal cchar=ᶠ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)g\ze\_W" conceal cchar=ᵍ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)h\ze\_W" conceal cchar=ʰ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)i\ze\_W" conceal cchar=ⁱ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)j\ze\_W" conceal cchar=ʲ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)k\ze\_W" conceal cchar=ᵏ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)l\ze\_W" conceal cchar=ˡ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)m\ze\_W" conceal cchar=ᵐ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)n\ze\_W" conceal cchar=ⁿ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)o\ze\_W" conceal cchar=ᵒ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)p\ze\_W" conceal cchar=ᵖ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)r\ze\_W" conceal cchar=ʳ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)s\ze\_W" conceal cchar=ˢ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)t\ze\_W" conceal cchar=ᵗ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)u\ze\_W" conceal cchar=ᵘ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)v\ze\_W" conceal cchar=ᵛ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)w\ze\_W" conceal cchar=ʷ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)x\ze\_W" conceal cchar=ˣ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)y\ze\_W" conceal cchar=ʸ + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)z\ze\_W" conceal cchar=ᶻ +endif + +" Not really Haskell, but quite handy for writing proofs in pseudo-code. +if Cf('∴') + syntax match hsNiceOperator "\" conceal cchar=∴ + syntax match hsNiceOperator "\" conceal cchar=∃ + syntax match hsNiceOperator "\" conceal cchar=∄ + syntax match hsNiceOperator ":=" conceal cchar=≝ +endif + +" TODO: +" See Basic Syntax Extensions - School of Haskell | FP Complete +" intersection = (∩) +" +" From the Data.IntMap.Strict.Unicode +" notMember = (∉) = flip (∌) +" member = (∈) = flip (∋) +" isProperSubsetOf = (⊂) = flip (⊃) +" +" From Data.Sequence.Unicode +" (<|) = (⊲ ) +" (|>) = (⊳ ) +" (><) = (⋈ ) diff --git a/etc/soft/nvim/+plugins/vim-haskellConcealPlus/after/syntax/lhaskell.vim b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/after/syntax/lhaskell.vim new file mode 100644 index 0000000..f6edcfb --- /dev/null +++ b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/after/syntax/lhaskell.vim @@ -0,0 +1,477 @@ +" vim: sw=4 +"============================================================================= +" What Is This: Add some conceal operator for your literate haskell files +" File: lhaskell.vim (conceal enhancement) +" Last Change: 2015-11-13 +" Version: 1.3.3 +" 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.3: lhaskell.vim added, only concealing inside code (\begin, >>) tags. +" - 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 + +syntax cluster haskellTop add=hsNiceOperator + +" vim: set fenc=utf-8: +syntax match hsNiceOperator "\\\ze[[:alpha:][:space:]_([]" conceal cchar=λ contained + +" 'q' option to disable concealing of scientific constants (e.g. π). +if !Cf('q') + syntax match hsNiceOperator "\" conceal cchar=π contained + syntax match hsNiceOperator "\" conceal cchar=τ contained + syntax match hsNiceOperator "\" conceal cchar=ℎ contained + syntax match hsNiceOperator "\" conceal cchar=ℏ contained +endif + +syntax match hsNiceOperator "==" conceal cchar=≡ contained +syntax match hsNiceOperator "\/=" conceal cchar=≢ contained + +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=⊥ contained + + " Match greater than and lower than w/o messing with Kleisli composition + syntax match hsNiceOperator "<=\ze[^<]" conceal cchar=≤ contained + syntax match hsNiceOperator ">=\ze[^>]" conceal cchar=≥ contained + + " Redfining to get proper '::' concealing + syntax match hs_DeclareFunction /^[a-z_(]\S*\(\s\|\n\)*::/me=e-2 nextgroup=hsNiceOperator contains=hs_FunctionName,hs_OpFunctionName contained + + syntax match hsNiceoperator "!!" conceal cchar=‼ contained + syntax match hsNiceoperator "++\ze[^+]" conceal cchar=⧺ contained + syntax match hsNiceOperator "\" conceal cchar=∀ contained + syntax match hsNiceOperator "-<" conceal cchar=↢ contained + syntax match hsNiceOperator ">-" conceal cchar=↣ contained + syntax match hsNiceOperator "-<<" conceal cchar=⤛ contained + syntax match hsNiceOperator ">>-" conceal cchar=⤜ contained + " the star does not seem so good... + " syntax match hsNiceOperator "*" conceal cchar=★ + syntax match hsNiceOperator "`div`" conceal cchar=÷ contained + + " Only replace the dot, avoid taking spaces around. + syntax match hsNiceOperator /\s\.\s/ms=s+1,me=e-1 conceal cchar=∘ contained + + syntax match hsQQEnd "|\]" contained conceal cchar=〛 contained + " sy match hsQQEnd "|\]" contained conceal=〚 + + syntax match hsNiceOperator "`elem`" conceal cchar=∈ contained + syntax match hsNiceOperator "`notElem`" conceal cchar=∉ contained + syntax match hsNiceOperator "`isSubsetOf`" conceal cchar=⊆ contained + syntax match hsNiceOperator "`union`" conceal cchar=∪ contained + syntax match hsNiceOperator "`intersect`" conceal cchar=∩ contained + syntax match hsNiceOperator "\\\\\ze[[:alpha:][:space:]_([]" conceal cchar=∖ contained + + syntax match hsNiceOperator "||\ze[[:alpha:][:space:]_([]" conceal cchar=∨ contained + syntax match hsNiceOperator "&&\ze[[:alpha:][:space:]_([]" conceal cchar=∧ contained + + syntax match hsNiceOperator "<\*>" conceal cchar=⊛ contained + syntax match hsNiceOperator "`mappend`" conceal cchar=⊕ contained + syntax match hsNiceOperator "\" conceal cchar=⊕ + syntax match hsNiceOperator "<>" conceal cchar=⊕ contained + syntax match hsNiceOperator "\" conceal cchar=∅ contained + syntax match hsNiceOperator "\" conceal cchar=∅ contained + syntax match hsNiceOperator "\" conceal cchar=∅ contained +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=℘ contained +endif + +" '𝐒' option to disable String type to 𝐒 concealing +if !Cf('𝐒') + syntax match hsNiceOperator "\" conceal cchar=𝐒 contained +endif + +" '𝐓' option to disable Text type to 𝐓 concealing +if !Cf('𝐓') + syntax match hsNiceOperator "\" conceal cchar=𝐓 contained +endif + +" '𝐄' option to disable Either/Right/Left to 𝐄/𝑅/𝐿 concealing +if !Cf('𝐄') + syntax match hsNiceOperator "\" conceal cchar=𝐄 contained + syntax match hsNiceOperator "\" conceal cchar=𝑅 contained + syntax match hsNiceOperator "\" conceal cchar=𝐿 contained +endif + +" '𝐌' option to disable Maybe/Just/Nothing to 𝐌/𝐽/𝑁 concealing +if !Cf('𝐌') + syntax match hsNiceOperator "\" conceal cchar=𝐌 contained + syntax match hsNiceOperator "\" conceal cchar=𝐽 contained + syntax match hsNiceOperator "\" conceal cchar=𝑁 contained +endif + +" 'A' option to not try to preserve indentation. +if Cf('A') + syntax match hsNiceOperator "<-" conceal cchar=← contained + syntax match hsNiceOperator "->" conceal cchar=→ contained + syntax match hsNiceOperator "=>" conceal cchar=⇒ contained + syntax match hsNiceOperator "\:\:" conceal cchar=∷ contained +else + syntax match hsLRArrowHead contained ">" conceal cchar= contained + syntax match hsLRArrowTail contained "-" conceal cchar=→ contained + syntax match hsLRArrowFull "->" contains=hsLRArrowHead,hsLRArrowTail contained + + syntax match hsRLArrowHead contained "<" conceal cchar=← contained + syntax match hsRLArrowTail contained "-" conceal cchar= contained + syntax match hsRLArrowFull "<-" contains=hsRLArrowHead,hsRLArrowTail contained + + syntax match hsLRDArrowHead contained ">" conceal cchar= contained + syntax match hsLRDArrowTail contained "=" conceal cchar=⇒ contained + syntax match hsLRDArrowFull "=>" contains=hsLRDArrowHead,hsLRDArrowTail contained +endif + +" 's' option to disable space consumption after ∑,∏,√ and ¬ functions. +if Cf('s') + syntax match hsNiceOperator "\" conceal cchar=∑ contained + syntax match hsNiceOperator "\" conceal cchar=∏ contained + syntax match hsNiceOperator "\" conceal cchar=√ contained + syntax match hsNiceOperator "\" conceal cchar=¬ contained +else + syntax match hsNiceOperator "\\(\ze\s*[.$]\|\s*\)" conceal cchar=∑ contained + syntax match hsNiceOperator "\\(\ze\s*[.$]\|\s*\)" conceal cchar=∏ contained + syntax match hsNiceOperator "\\(\ze\s*[.$]\|\s*\)" conceal cchar=√ contained + syntax match hsNiceOperator "\\(\ze\s*[.$]\|\s*\)" conceal cchar=¬ contained +endif + +" '*' option to enable concealing of asterisk with '⋅' sign. +if Cf('*') + syntax match hsNiceOperator "*" conceal cchar=⋅ contained +" 'x' option to disable default concealing of asterisk with '×' sign. +elseif !Cf('x') + syntax match hsNiceOperator "*" conceal cchar=× contained +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=‥ contained +" 'e' option to disable ellipsis concealing with … (ellipsis sign). +elseif !Cf('e') + syntax match hsNiceOperator "\.\." conceal cchar=… contained +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=⇒ contained +endif + +" '⇔' option to disable `iff` concealing with ⇔ +if !Cf('⇔') + syntax match hsNiceOperator "`iff`" conceal cchar=⇔ contained +endif + +" 'r' option to disable return (η) and join (µ) concealing. +if !Cf('r') + syntax match hsNiceOperator "\" conceal cchar=η contained + syntax match hsNiceOperator "\" conceal cchar=µ contained +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=★ contained +" 'c' option to enable encircled b/d (ⓑ/ⓓ) for right and left binds. +elseif Cf('c') + syntax match hsNiceOperator ">>=" conceal cchar=ⓑ contained + syntax match hsNiceOperator "=<<" conceal cchar=ⓓ contained +" 'h' option to enable partial concealing of binds (e.g. »=). +elseif Cf('h') + syntax match hsNiceOperator ">>" conceal cchar=» contained + syntax match hsNiceOperator "<<" conceal cchar=« contained + syntax match hsNiceOperator "=\zs<<" conceal cchar=« contained +" Left and right arrows with hooks are the default option for binds. +else + syntax match hsNiceOperator ">>=\ze\_[[:alpha:][:space:]_()[\]]" conceal cchar=↪ contained + syntax match hsNiceOperator "=<<\ze\_[[:alpha:][:space:]_()[\]]" conceal cchar=↩ contained +endif + +if !Cf('h') + syntax match hsNiceOperator ">>\ze\_[[:alpha:][:space:]_()[\]]" conceal cchar=» contained + syntax match hsNiceOperator "<<\ze\_[[:alpha:][:space:]_()[\]]" conceal cchar=« contained +endif + +" 'C' option to enable encircled 'm' letter ⓜ concealing for fmap. +if Cf('C') + syntax match hsNiceOperator "<$>" conceal cchar=ⓜ contained + syntax match hsNiceOperator "`fmap`" conceal cchar=ⓜ contained +" 'l' option to disable fmap/lift concealing with ↥. +elseif !Cf('l') + syntax match hsNiceOperator "`liftM`" conceal cchar=↥ contained + syntax match hsNiceOperator "`liftA`" conceal cchar=↥ contained + syntax match hsNiceOperator "`fmap`" conceal cchar=↥ contained + syntax match hsNiceOperator "<$>" conceal cchar=↥ contained + + syntax match LIFTQ contained "`" conceal contained + syntax match LIFTQl contained "l" conceal cchar=↥ contained + syntax match LIFTl contained "l" conceal cchar=↥ contained + syntax match LIFTi contained "i" conceal contained + syntax match LIFTf contained "f" conceal contained + syntax match LIFTt contained "t" conceal contained + syntax match LIFTA contained "A" conceal contained + syntax match LIFTM contained "M" conceal contained + syntax match LIFT2 contained "2" conceal cchar=² contained + syntax match LIFT3 contained "3" conceal cchar=³ contained + syntax match LIFT4 contained "4" conceal cchar=⁴ contained + syntax match LIFT5 contained "5" conceal cchar=⁵ contained + + syntax match hsNiceOperator "`liftM2`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT2 contained + syntax match hsNiceOperator "`liftM3`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT3 contained + syntax match hsNiceOperator "`liftM4`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT4 contained + syntax match hsNiceOperator "`liftM5`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT5 contained + syntax match hsNiceOperator "`liftA2`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTA,LIFT2 contained + syntax match hsNiceOperator "`liftA3`" contains=LIFTQ,LIFTQl,LIFTi,LIFTf,LIFTt,LIFTA,LIFT3 contained + + syntax match FMAPf contained "f" conceal cchar=↥ contained + syntax match FMAPm contained "m" conceal contained + syntax match FMAPa contained "a" conceal contained + syntax match FMAPp contained "p" conceal contained + syntax match FMAPSPC contained " " conceal contained + syntax match hsNiceOperator "\\s*" contains=FMAPf,FMAPm,FMAPa,FMAPp,FMAPSPC contained + + syntax match LIFTSPC contained " " conceal contained + syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTA,LIFTSPC contained + syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTA,LIFT2,LIFTSPC contained + syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTA,LIFT3,LIFTSPC contained + + syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFTSPC contained + syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT2,LIFTSPC contained + syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT3,LIFTSPC contained + syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT4,LIFTSPC contained + syntax match hsNiceOperator "\\s*" contains=LIFTl,LIFTi,LIFTf,LIFTt,LIFTM,LIFT5,LIFTSPC contained + + " TODO: Move liftIO to its own flag? + syntax match LIFTIOL contained "l" conceal contained + syntax match LIFTI contained "I" conceal cchar=i contained + syntax match LIFTO contained "O" conceal cchar=o contained + syntax match hsNiceOperator "\" contains=LIFTIOl,LIFTi,LIFTf,LIFTt,LIFTI,LIFTO contained +endif + +" '↱' option to disable mapM/forM concealing with ↱/↰ +if !Cf('↱') + syntax match MAPMQ contained "`" conceal contained + syntax match MAPMm contained "m" conceal cchar=↱ contained + syntax match MAPMmQ contained "m" conceal cchar=↰ contained + syntax match MAPMa contained "a" conceal contained + syntax match MAPMp contained "p" conceal contained + syntax match MAPMM contained "M" conceal contained + syntax match MAPMM contained "M" conceal contained + syntax match MAPMU contained "_" conceal cchar=_ contained + syntax match SPC contained " " conceal contained + syntax match hsNiceOperator "`mapM_`" contains=MAPMQ,MAPMmQ,MAPMa,MAPMp,MAPMM,MAPMU contained + syntax match hsNiceOperator "`mapM`" contains=MAPMQ,MAPMmQ,MAPMa,MAPMp,MAPMM contained + syntax match hsNiceOperator "\\s*" contains=MAPMm,MAPMa,MAPMp,MAPMM,SPC contained + syntax match hsNiceOperator "\\s*" contains=MAPMm,MAPMa,MAPMp,MAPMM,MAPMU,SPC contained + + syntax match FORMQ contained "`" conceal contained + syntax match FORMfQ contained "f" conceal cchar=↱ contained + syntax match FORMf contained "f" conceal cchar=↰ contained + syntax match FORMo contained "o" conceal contained + syntax match FORMr contained "r" conceal contained + syntax match FORMM contained "M" conceal contained + syntax match FORMU contained "_" conceal cchar=_ contained + + syntax match hsNiceOperator "`forM`" contains=FORMQ,FORMfQ,FORMo,FORMr,FORMM contained + syntax match hsNiceOperator "`forM_`" contains=FORMQ,FORMfQ,FORMo,FORMr,FORMM,FORMU contained + + syntax match hsNiceOperator "\\s*" contains=FORMf,FORMo,FORMr,FORMM,SPC contained + syntax match hsNiceOperator "\\s*" contains=FORMf,FORMo,FORMr,FORMM,FORMU,SPC contained +endif + +" 'w' option to disable 'where' concealing with "due to"/∵ symbol. +if !Cf('w') + " ∵ means "because/since/due to." With quite a stretch this can be + " used for 'where'. We preserve spacing, otherwise it breaks indenting + " in a major way. + syntax match WS contained "w" conceal cchar=∵ contained + syntax match HS contained "h" conceal cchar= contained + syntax match ES contained "e" conceal cchar= contained + syntax match RS contained "r" conceal cchar= contained + syntax match hsNiceOperator "\" contains=WS,HS,ES,RS,ES contained +endif + +" '-' option to disable subtract/(-) concealing with ⊟. +if !Cf('-') + " Minus is a special syntax construct in Haskell. We use squared minus to + " tell the syntax from the binary function. + syntax match hsNiceOperator "(-)" conceal cchar=⊟ contained + syntax match hsNiceOperator "`subtract`" conceal cchar=⊟ contained +endif + +" 'I' option to enable alternative ':+' concealing with with ⨢. +if Cf('I') + " With some fonts might look better than ⅈ. + syntax match hsNiceOperator ":+" conceal cchar=⨢ contained +" 'i' option to disable default concealing of ':+' with ⅈ. +elseif !Cf('i') + syntax match hsNiceOperator ":+" conceal cchar=ⅈ contained +endif + +" 'R' option to disable realPart/imagPart concealing with ℜ/ℑ. +if !Cf('R') + syntax match hsNiceOperator "\" conceal cchar=ℜ contained + syntax match hsNiceOperator "\" conceal cchar=ℑ contained +endif + +" 'T' option to enable True/False constants concealing with bold 𝐓/𝐅. +if Cf('T') + syntax match hsNiceSpecial "\" conceal cchar=𝐓 contained + syntax match hsNiceSpecial "\" conceal cchar=𝐅 contained +" 't' option to disable True/False constants concealing with italic 𝑇/𝐹. +elseif !Cf('t') + syntax match hsNiceSpecial "\" conceal cchar=𝑇 contained + syntax match hsNiceSpecial "\" conceal cchar=𝐹 contained +endif + +" 'B' option to disable Bool type to 𝔹 concealing +if !Cf('B') + " Not an official notation ttbomk. But at least + " http://www.haskell.org/haskellwiki/Unicode-symbols mentions it. + syntax match hsNiceOperator "\" conceal cchar=𝔹 contained +endif + +" 'Q' option to disable Rational type to ℚ concealing. +if !Cf('Q') + syntax match hsNiceOperator "\" conceal cchar=ℚ +endif + +" 'Z' option to disable Integer type to ℤ concealing. +if !Cf('Z') + syntax match hsNiceOperator "\" conceal cchar=ℤ contained +endif + +" 'N' option to disable Natural, Nat types to ℕ concealing. +if !Cf('N') + syntax match hsNiceOperator "\" conceal cchar=ℕ contained + syntax match hsNiceOperator "\" conceal cchar=ℕ contained +endif + +" '𝔻' option to disable Double type to 𝔻 concealing +if !Cf('𝔻') + syntax match hsNiceOperator "\" conceal cchar=𝔻 contained +endif + +" '1' option to disable numeric superscripts concealing, e.g. x². +if !Cf('1') + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)0\ze\_W" conceal cchar=⁰ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)1\ze\_W" conceal cchar=¹ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)2\ze\_W" conceal cchar=² contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)3\ze\_W" conceal cchar=³ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)4\ze\_W" conceal cchar=⁴ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)5\ze\_W" conceal cchar=⁵ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)6\ze\_W" conceal cchar=⁶ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)7\ze\_W" conceal cchar=⁷ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)8\ze\_W" conceal cchar=⁸ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)9\ze\_W" conceal cchar=⁹ contained +endif + +" 'a' option to disable alphabet superscripts concealing, e.g. xⁿ. +if !Cf('a') + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)a\ze\_W" conceal cchar=ᵃ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)b\ze\_W" conceal cchar=ᵇ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)c\ze\_W" conceal cchar=ᶜ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)d\ze\_W" conceal cchar=ᵈ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)e\ze\_W" conceal cchar=ᵉ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)f\ze\_W" conceal cchar=ᶠ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)g\ze\_W" conceal cchar=ᵍ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)h\ze\_W" conceal cchar=ʰ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)i\ze\_W" conceal cchar=ⁱ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)j\ze\_W" conceal cchar=ʲ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)k\ze\_W" conceal cchar=ᵏ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)l\ze\_W" conceal cchar=ˡ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)m\ze\_W" conceal cchar=ᵐ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)n\ze\_W" conceal cchar=ⁿ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)o\ze\_W" conceal cchar=ᵒ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)p\ze\_W" conceal cchar=ᵖ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)r\ze\_W" conceal cchar=ʳ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)s\ze\_W" conceal cchar=ˢ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)t\ze\_W" conceal cchar=ᵗ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)u\ze\_W" conceal cchar=ᵘ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)v\ze\_W" conceal cchar=ᵛ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)w\ze\_W" conceal cchar=ʷ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)x\ze\_W" conceal cchar=ˣ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)y\ze\_W" conceal cchar=ʸ contained + syntax match hsNiceOperator "\(\*\*\|\^\|\^\^\)z\ze\_W" conceal cchar=ᶻ contained +endif + +" Not really Haskell, but quite handy for writing proofs in pseudo-code. +if Cf('∴') + syntax match hsNiceOperator "\" conceal cchar=∴ contained + syntax match hsNiceOperator "\" conceal cchar=∃ contained + syntax match hsNiceOperator "\" conceal cchar=∄ contained + syntax match hsNiceOperator ":=" conceal cchar=≝ contained +endif + +" TODO: +" See Basic Syntax Extensions - School of Haskell | FP Complete +" intersection = (∩) +" +" From the Data.IntMap.Strict.Unicode +" notMember = (∉) = flip (∌) +" member = (∈) = flip (∋) +" isProperSubsetOf = (⊂) = flip (⊃) +" +" From Data.Sequence.Unicode +" (<|) = (⊲ ) +" (|>) = (⊳ ) +" (><) = (⋈ ) diff --git a/etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.hs b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.hs new file mode 100644 index 0000000..932b643 --- /dev/null +++ b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.hs @@ -0,0 +1,46 @@ +{-# LANGUAGE ExistentialQuantification, RankNTypes #-} +import Control.Applicative +import Data.Monoid +import Control.Monad.ST.Lazy +import Control.Monad +import Numeric +import Data.Complex +import Data.List + +factorial :: Integer -> Integer +factorial n = product as + where as = [n, n-1..1] + +integral :: (Num a, Enum a) => (a -> a) -> a -> (a,a) -> a +integral f dx (a,b) = sum ((\x -> f(x)*dx) <$> ab) + where ab = [a,a+dx..b-dx] + +isValid :: Integer -> Bool -> Bool -> Bool +isValid a b c = (a >= 0 && a <= 10) || (b && not c) + +rs :: forall a. (forall s. ST s a) -> a +rs = runST + +main :: IO () +main = do + let tau = 2*pi + putSL $ showF 2 $ integral sin 0.001 (pi,tau) + print $ unsafe [pi,tau] + print $ factorial <$> [1..13`div`2] + print $ texNum . showF 2 <$> (mag <$> [1,2] <*> [3,4]) + print $ Just True >>= (\x -> return $ x `elem` [True, False, False]) + >>= (\x -> if x /= True + then Nothing + else return True) + >>= (\x -> return $ isValid 1 True x) + print $ [1,2] `union` [3,4] == [-9,-8..4] `intersect` [1,2..9] + print $ (++"il") <$> (Just "fa" >> guard False >> return undefined) + print $ realPart(4:+2) == imagPart(2:+4) + print $ liftM3 (\x y z -> x+y+z) [1] [2] [39] + putSL $ "Hask" <> "ell" + where + mag a b = sqrt(a^2 + b^2) + showF n f = showFFloat (Just n) f empty + unsafe xs = (xs!!0,xs!!1) + texNum num = "$\\num{" ++ num ++ "}$" + putSL = putStrLn diff --git a/etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.lhs b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.lhs new file mode 100644 index 0000000..ca75204 --- /dev/null +++ b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.lhs @@ -0,0 +1,90 @@ +{-# LANGUAGE ExistentialQuantification, RankNTypes #-} +import Control.Applicative +>> import Control.Applicative +import Data.Monoid +>> import Data.Monoid +import Control.Monad.ST.Lazy +>> import Control.Monad.ST.Lazy +import Control.Monad +>> import Control.Monad +import Numeric +>> import Numeric +import Data.Complex +>> import Data.Complex +import Data.List +>> import Data.List + +factorial :: Integer -> Integer +factorial n = product as + where as = [n, n-1..1] + +>> factorial :: Integer -> Integer +>> factorial n = product as +>> where as = [n, n-1..1] + +integral :: (Num a, Enum a) => (a -> a) -> a -> (a,a) -> a +integral f dx (a,b) = sum ((\x -> f(x)*dx) <$> ab) + where ab = [a,a+dx..b-dx] + +>> integral :: (Num a, Enum a) => (a -> a) -> a -> (a,a) -> a +>> integral f dx (a,b) = sum ((\x -> f(x)*dx) <$> ab) +>> where ab = [a,a+dx..b-dx] + +isValid :: Integer -> Bool -> Bool -> Bool +isValid a b c = (a >= 0 && a <= 10) || (b && not c) + +>> isValid :: Integer -> Bool -> Bool -> Bool +>> isValid a b c = (a >= 0 && a <= 10) || (b && not c) + +rs :: forall a. (forall s. ST s a) -> a +rs = runST +>> rs :: forall a. (forall s. ST s a) -> a +>> rs = runST + +main :: IO () +main = do + let tau = 2*pi + putSL $ showF 2 $ integral sin 0.001 (pi,tau) + print $ unsafe [pi,tau] + print $ factorial <$> [1..13`div`2] + print $ texNum . showF 2 <$> (mag <$> [1,2] <*> [3,4]) + print $ Just True >>= (\x -> return $ x `elem` [True, False, False]) + >>= (\x -> if x /= True + then Nothing + else return True) + >>= (\x -> return $ isValid 1 True x) + print $ [1,2] `union` [3,4] == [-9,-8..4] `intersect` [1,2..9] + print $ (++"il") <$> (Just "fa" >> guard False >> return undefined) + print $ realPart(4:+2) == imagPart(2:+4) + print $ liftM3 (\x y z -> x+y+z) [1] [2] [39] + putSL $ "Hask" <> "ell" + where + mag a b = sqrt(a^2 + b^2) + showF n f = showFFloat (Just n) f empty + unsafe xs = (xs!!0,xs!!1) + texNum num = "$\\num{" ++ num ++ "}$" + putSL = putStrLn + +>> main :: IO () +>> main = do +>> let tau = 2*pi +>> putSL $ showF 2 $ integral sin 0.001 (pi,tau) +>> print $ unsafe [pi,tau] +>> print $ factorial <$> [1..13`div`2] +>> print $ texNum . showF 2 <$> (mag <$> [1,2] <*> [3,4]) +>> print $ Just True >>= (\x -> return $ x `elem` [True, False, False]) +>> >>= (\x -> if x /= True +>> then Nothing +>> else return True) +>> >>= (\x -> return $ isValid 1 True x) +>> print $ [1,2] `union` [3,4] == [-9,-8..4] `intersect` [1,2..9] +>> print $ (++"il") <$> (Just "fa" >> guard False >> return undefined) +>> print $ realPart(4:+2) == imagPart(2:+4) +>> print $ liftM3 (\x y z -> x+y+z) [1] [2] [39] +>> putSL $ "Hask" <> "ell" +>> where +>> mag a b = sqrt(a^2 + b^2) +>> showF n f = showFFloat (Just n) f empty +>> unsafe xs = (xs!!0,xs!!1) +>> texNum num = "$\\num{" ++ num ++ "}$" +>> putSL = putStrLn diff --git a/etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.png b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..9d898cc3cdc44bb54af1a6699b904737b1396b18 GIT binary patch literal 185386 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¬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 kHS6U!1w?@rsAr+gtzXW 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

UPa6$7G9}+V)?r=SzCl#s`2YUbr@R<6@fR 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 qvT*aUuxx&nIQp+USXvvJesKN&-yxy /etc/locale.gen +run dpkg-reconfigure locales --frontend=noninteractive + +run apt-get install -y vim +run apt-get install -y git +run apt-get install -y screen + +run useradd -m -s /bin/bash user +env SHELL /bin/bash +env LANG en_US.UTF-8 +env LC_CTYPE en_US.UTF8 + +user user +run mkdir -p ~/.vim/pack/vim-haskellConcealPlus/start && \ + cd ~/.vim/pack/vim-haskellConcealPlus/start && \ + git clone https://github.com/enomsg/vim-haskellConcealPlus +run echo "syn on\nsetlocal conceallevel=2\nset concealcursor=nciv" > ~/.vimrc +# Run in screen as it handles terminal capabilities better than most of the raw +# terminals. +cmd screen vim ~/.vim/pack/vim-haskellConcealPlus/start/vim-haskellConcealPlus/demo.hs +#cmd bash +EOF_DOCKERFILE + +docker run \ + -e TERM="$TERM" \ + -w /home/user \ + -it "$tag" "$@" diff --git a/etc/soft/nvim/+plugins/vim-haskellConcealPlus/tests/test-with-pathogen.sh b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/tests/test-with-pathogen.sh new file mode 100755 index 0000000..385a118 --- /dev/null +++ b/etc/soft/nvim/+plugins/vim-haskellConcealPlus/tests/test-with-pathogen.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -e + +tag=test + +docker build -t "$tag" - << EOF_DOCKERFILE +from debian:buster + +run apt-get update + +run apt-get install -y locales +run echo en_US.UTF-8 UTF-8 > /etc/locale.gen +run dpkg-reconfigure locales --frontend=noninteractive + +run apt-get install -y vim +run apt-get install -y vim-pathogen +run apt-get install -y git +run apt-get install -y screen + +run useradd -m -s /bin/bash user +env SHELL /bin/bash +env LANG en_US.UTF-8 +env LC_CTYPE en_US.UTF8 + +user user +run mkdir -p ~/.vim/bundle && cd ~/.vim/bundle && git clone https://github.com/enomsg/vim-haskellConcealPlus +run echo "execute pathogen#infect()\nsyn on\nsetlocal conceallevel=2\nset concealcursor=nciv" > ~/.vimrc +# Run in screen as it handles terminal capabilities better than most of the raw +# terminals. +cmd screen vim ~/.vim/bundle/vim-haskellConcealPlus/demo.hs +#cmd bash +EOF_DOCKERFILE + +docker run \ + -e TERM="$TERM" \ + -w /home/user \ + -it "$tag" "$@" diff --git a/etc/soft/nvim/+plugins/vim-haskellfold/README.md b/etc/soft/nvim/+plugins/vim-haskellfold/README.md new file mode 100644 index 0000000..6c32307 --- /dev/null +++ b/etc/soft/nvim/+plugins/vim-haskellfold/README.md @@ -0,0 +1,14 @@ +# haskellFold + +Provide a better folding for haskell file. The folded lines are transformed +to display the type signature (if any) of the function, providing a great +overview of your file content. + +You can get a shorter version of the foldtext (only the first relevant line) +by setting `g:haskellFold_ShortText = 1` + +# Installation + +Drop the file in ~/.vim/plugin or ~/vimfiles/plugin folder, or if you +use pathogen into the ~/.vim/bundle/vim-haskellFold or +~/vimfiles/bundle/vim-haskellFold diff --git a/etc/soft/nvim/+plugins/vim-haskellfold/autoload/haskellFold.vim b/etc/soft/nvim/+plugins/vim-haskellfold/autoload/haskellFold.vim new file mode 100644 index 0000000..492040f --- /dev/null +++ b/etc/soft/nvim/+plugins/vim-haskellfold/autoload/haskellFold.vim @@ -0,0 +1,121 @@ +" ============================================================================= +" 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.2 +" Changelog: - 1.2 : Reacting to file type instead of file extension. +" - 1.1 : Adding foldtext to bet more information. +" - 1.0 : initial version +" ============================================================================= +" Top level bigdefs +fun! s:HaskellFoldMaster( line ) "{{{ + return a:line =~# '^data\s' + \ || a:line =~# '^type\s' + \ || a:line =~# '^newtype\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#HaskellFold( lineNum ) "{{{ + let line = getline( a:lineNum ) + + " Beginning of comment + if line =~ '^\s*--' || line =~ '^\s*{-' + return 2 + endif + + if line =~ '^import' + 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 =~ "^--" || nextline =~ "^{-" + return 0 + else + return -1 + endif + endif + + return 1 +endfunction "}}} + +" This function skim over function definitions +" skiping comments line : +" -- .... +" and merging lines without first non space element, to +" catch the full type expression. +fun! haskellFold#HaskellFoldText() "{{{ + let i = v:foldstart + let retVal = '' + let began = 0 + + let commentOnlyLine = '^\s*--.*$' + let monoLineComment = '\s*--.*$' + let nonEmptyLine = '^\s\+\S' + let emptyLine = '^\s*$' + let multilineCommentBegin = '^\s*{-' + let multilineCommentEnd = '-}' + + let short = get(g:, 'haskellFold_ShortText', 0) + let isMultiLine = 0 + + let line = getline(i) + while i <= v:foldend + + if isMultiLine + if line =~ multilineCommentEnd + let isMultiLine = 0 + let line = substitute(line, '.*-}', '', '') + + if line =~ emptyLine + let i = i + 1 + let line = getline(i) + end + else + let i = i + 1 + let line = getline(i) + end + else + if line =~ multilineCommentBegin + let isMultiLine = 1 + continue + elseif began == 0 && !(line =~ commentOnlyLine) + let retVal = substitute(line, monoLineComment, ' ','') + let began = 1 + elseif began != 0 && line =~ nonEmptyLine && !short + let tempVal = substitute( line, '\s\+\(.*\)$', ' \1', '' ) + let retVal = retVal . substitute(tempVal, '\s\+--.*', ' ','') + elseif began != 0 + break + endif + + let i = i + 1 + let line = getline(i) + endif + endwhile + + if retVal == '' + " We didn't found any meaningfull text + return foldtext() + endif + + return retVal +endfunction "}}} diff --git a/etc/soft/nvim/+plugins/vim-haskellfold/ftplugin/haskell.vim b/etc/soft/nvim/+plugins/vim-haskellfold/ftplugin/haskell.vim new file mode 100644 index 0000000..eb5daee --- /dev/null +++ b/etc/soft/nvim/+plugins/vim-haskellfold/ftplugin/haskell.vim @@ -0,0 +1 @@ +call SetHaskellFolding() diff --git a/etc/soft/nvim/+plugins/vim-haskellfold/plugin/haskellFold.vim b/etc/soft/nvim/+plugins/vim-haskellfold/plugin/haskellFold.vim new file mode 100644 index 0000000..74f19ba --- /dev/null +++ b/etc/soft/nvim/+plugins/vim-haskellfold/plugin/haskellFold.vim @@ -0,0 +1,11 @@ +if exists("g:__HASKELLFOLD_VIM__") + finish +endif + +let g:__HASKELLFOLD_VIM__ = 1 + +fun! SetHaskellFolding() "{{{ + setlocal foldexpr=haskellFold#HaskellFold(v:lnum) + setlocal foldtext=haskellFold#HaskellFoldText() + setlocal foldmethod=expr +endfunction "}}} diff --git a/etc/soft/nvim/+plugins_disabled/vim-haskellConceal/README b/etc/soft/nvim/+plugins_disabled/vim-haskellConceal/README new file mode 100644 index 0000000..d2bf6b2 --- /dev/null +++ b/etc/soft/nvim/+plugins_disabled/vim-haskellConceal/README @@ -0,0 +1,11 @@ +Use Vim 7.3 Conceal feature to display unicode operator +in Haskell without changing the underlying file. + +GitHub: https://github.com/Twinside/vim-haskellConceal + +## Installation + +Decompress in your ~/vimfiles or ~/.vim, if you're using +pathogen (you should), put it in ~/.vim/bundle/haskellConceal +folder + diff --git a/etc/soft/nvim/+plugins_disabled/vim-haskellConceal/after/syntax/haskell.vim b/etc/soft/nvim/+plugins_disabled/vim-haskellConceal/after/syntax/haskell.vim new file mode 100644 index 0000000..7b99908 --- /dev/null +++ b/etc/soft/nvim/+plugins_disabled/vim-haskellConceal/after/syntax/haskell.vim @@ -0,0 +1,103 @@ +"============================================================================= +" What Is This: Add some conceal operator for your haskell files +" File: haskell.vim (conceal enhancement) +" Author: Vincent Berthoux +" 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 +" +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=λ +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=√ +syntax match hsNiceOperator "\" conceal cchar=π +syntax match hsNiceOperator "==" conceal cchar=≡ +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=≥ + + syntax match hsNiceOperator "=>" conceal cchar=⇒ + syntax match hsNiceOperator "=\zs<<" 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 "++" 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=★ + + " Only replace the dot, avoid taking spaces around. + syntax match hsNiceOperator /\s\.\s/ms=s+1,me=e-1 conceal cchar=∘ + syntax match hsNiceOperator "\.\." 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=∉ +endif + +hi link hsNiceOperator Operator +hi! link Conceal Operator +setlocal conceallevel=2 + diff --git a/etc/soft/nvim/ftdetect/detect.vim b/etc/soft/nvim/ftdetect/detect.vim index 14e4519..471cb67 100644 --- a/etc/soft/nvim/ftdetect/detect.vim +++ b/etc/soft/nvim/ftdetect/detect.vim @@ -1,6 +1,3 @@ -au BufNewFile,BufRead *.hs set foldexpr=HaskellFold(v:lnum) -au BufNewFile,BufRead *.hs set foldmethod=expr - au BufNewFile,BufRead *.test set filetype=tcl au BufNewFile,BufRead *.txt set textwidth=80 au BufNewFile,BufRead *.txt set filetype=txt @@ -11,7 +8,7 @@ au BufRead,BufNewFile *.xpt.vim set filetype=xpt.vim au BufRead,BufNewFile *.xpt.vim set filetype=xpt.vim au BufRead,BufNewFile *.vim set filetype=vim au BufRead,BufNewFile *.mutt set filetype=muttrc -au BufRead,BufNewFile *rtorrent.rc* set filetype=rtorrent +au BufRead,BufNewFile *rtorrent.rc* set filetype=rtorrent au BufRead,BufNewFile *.gv set filetype=graphviz au BufRead,BufNewFile *.r set filetype=rebol au BufRead,BufNewFile rfc* set filetype=rfc @@ -21,9 +18,9 @@ au BufWinEnter,BufRead,BufNewFile *.wiki set nocursorline au BufRead,BufNewFile *.timelog set filetype=timelog au BufRead,BufNewFile *.rkt set filetype=racket -au BufRead,BufNewFile *.scm runtime plugin/RainbowParenthsis.vim -au BufRead,BufNewFile *.lisp runtime plugin/RainbowParenthsis.vim -au BufRead,BufNewFile *.rkt runtime plugin/RainbowParenthsis.vim +au BufRead,BufNewFile *.scm runtime plugin/RainbowParenthsis.vim +au BufRead,BufNewFile *.lisp runtime plugin/RainbowParenthsis.vim +au BufRead,BufNewFile *.rkt runtime plugin/RainbowParenthsis.vim au BufRead,BufNewFile *.scm set lisp au BufRead,BufNewFile *.lisp set lisp diff --git a/etc/soft/nvim/syntax/haskell.vim b/etc/soft/nvim/syntax/haskell.vim deleted file mode 100644 index b8df3bf..0000000 --- a/etc/soft/nvim/syntax/haskell.vim +++ /dev/null @@ -1,577 +0,0 @@ -" Vim syntax file -" Language: Haskell -" Maintainer: Rui Carlos A. Goncalves -" Yang Zhang -" Last Change: July 31, 2010 -" -" Version: 1.3 -" Url: http://www.rcg-pt.net/programacao/haskell.vim.gz -" -" Original Author: John Williams - -" Remove any old syntax stuff hanging around -if version < 600 - syn clear -elseif exists("b:current_syntax") - finish -endif - - -" (Qualified) identifiers (no default highlighting) -syn match ConId "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=\<[A-Z][a-zA-Z0-9_']*\>" -syn match VarId "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=\<[a-z][a-zA-Z0-9_']*\>" - - -" Infix operators--most punctuation characters and any (qualified) identifier -" enclosed in `backquotes`. An operator starting with : is a constructor, -" others are variables (e.g. functions). -syn match hsVarSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[-!#$%&\*\+/<=>\?@\\^|~.][-!#$%&\*\+/<=>\?@\\^|~:.]*" -syn match hsConSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=:[-!#$%&\*\+./<=>\?@\\^|~:]*" -syn match hsVarSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[a-z][a-zA-Z0-9_']*`" -syn match hsConSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[A-Z][a-zA-Z0-9_']*`" - - -" Reserved symbols--cannot be overloaded. -syn match hsDelimiter "(\|)\|\[\|\]\|,\|;\|_\|{\|}" - - -" Strings and constants -syn match hsSpecialChar contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)" -syn match hsSpecialChar contained "\\\(NUL\|SOH\|STX\|ETX\|EOT\|ENQ\|ACK\|BEL\|BS\|HT\|LF\|VT\|FF\|CR\|SO\|SI\|DLE\|DC1\|DC2\|DC3\|DC4\|NAK\|SYN\|ETB\|CAN\|EM\|SUB\|ESC\|FS\|GS\|RS\|US\|SP\|DEL\)" -syn match hsSpecialCharError contained "\\&\|'''\+" -syn region hsString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=hsSpecialChar -syn match hsCharacter "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=hsSpecialChar,hsSpecialCharError -syn match hsCharacter "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=hsSpecialChar,hsSpecialCharError -syn match hsNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>" -syn match hsFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>" - - -" Keyword definitions. These must be patters instead of keywords -" because otherwise they would match as keywords at the start of a -" "literate" comment (see lhs.vim). -syn match hsModule "\" -syn match hsImport "\.*"he=s+6 contains=hsImportMod -syn match hsImportMod contained "\<\(as\|qualified\|hiding\)\>" -syn match hsInfix "\<\(infix\|infixl\|infixr\)\>" -syn match hsStructure "\<\(class\|data\|deriving\|instance\|default\|where\)\>" -syn match hsTypedef "\<\(type\|newtype\)\>" -syn match hsStatement "\<\(do\|return\|case\|of\|let\|in\)\>" -syn match hsConditional "\<\(if\|then\|else\)\>" - - -" Types -syn keyword hsType Array -syn keyword hsType Bool BufferMode -syn keyword hsType CalendarTime Char ClockTime Complex Complex -syn keyword hsType Day Double -syn keyword hsType Either ExitCode -syn keyword hsType FilePath Float -syn keyword hsType Handle HandlePosn -syn keyword hsType Int Integer IO IOError IOMode -syn keyword hsType Maybe Month -syn keyword hsType Ordering -syn keyword hsType Permissions -syn keyword hsType Ratio Rational Rational Read ReadS -syn keyword hsType SeekMode Show ShowS StdGen String -syn keyword hsType TimeDiff TimeLocale - - -" Classes from the standard prelude -syn keyword hsCls Bounded -syn keyword hsCls Enum Eq -syn keyword hsCls Floating Fractional Functor -syn keyword hsCls Integral Ix -syn keyword hsCls Monad MonadPlus -syn keyword hsCls Num -syn keyword hsCls Ord -syn keyword hsCls Random RandomGen Read Real RealFloat RealFrac -syn keyword hsCls Show - - -" Functions -syn keyword hsFunc abs -syn keyword hsFunc accum -syn keyword hsFunc accumArray -syn keyword hsFunc acos -syn keyword hsFunc acosh -syn keyword hsFunc addToClockTime -syn keyword hsFunc all -syn keyword hsFunc and -syn keyword hsFunc any -syn keyword hsFunc ap -syn keyword hsFunc appendFile -syn keyword hsFunc approxRational -syn keyword hsFunc array -syn keyword hsFunc asin -syn keyword hsFunc asinh -syn keyword hsFunc assocs -syn keyword hsFunc asTypeOf -syn keyword hsFunc atan -syn keyword hsFunc atan2 -syn keyword hsFunc atanh - -syn keyword hsFunc bounds -syn keyword hsFunc bracket -syn keyword hsFunc bracket_ -syn keyword hsFunc break - -syn keyword hsFunc calendarTimeToString -syn keyword hsFunc catch -syn keyword hsFunc catMaybes -syn keyword hsFunc ceiling -syn keyword hsFunc chr -syn keyword hsFunc cis -syn keyword hsFunc compare -syn keyword hsFunc concat -syn keyword hsFunc concatMap -syn keyword hsFunc conjugate -syn keyword hsFunc const -syn keyword hsFunc cos -syn keyword hsFunc cosh -syn keyword hsFunc cpuTimePrecision -syn keyword hsFunc createDirectory -syn keyword hsFunc curry -syn keyword hsFunc cycle - -syn keyword hsFunc decodeFloat -syn keyword hsFunc defaultTimeLocale -syn keyword hsFunc delete -syn keyword hsFunc deleteBy -syn keyword hsFunc denominator -syn keyword hsFunc diffClockTimes -syn keyword hsFunc digitToInt -syn keyword hsFunc div -syn keyword hsFunc divMod -syn keyword hsFunc doesDirectoryExist -syn keyword hsFunc doesFileExist -syn keyword hsFunc drop -syn keyword hsFunc dropWhile - -syn keyword hsFunc either -syn keyword hsFunc elem -syn keyword hsFunc elemIndex -syn keyword hsFunc elemIndices -syn keyword hsFunc elems -syn keyword hsFunc encodeFloat -syn keyword hsFunc enumFrom -syn keyword hsFunc enumFromThen -syn keyword hsFunc enumFromThenTo -syn keyword hsFunc enumFromTo -syn keyword hsFunc error -syn keyword hsFunc even -syn keyword hsFunc executable -syn keyword hsFunc exitFailure -syn keyword hsFunc exitWith -syn keyword hsFunc exp -syn keyword hsFunc exponent - -syn keyword hsFunc fail -syn keyword hsFunc filter -syn keyword hsFunc filterM -syn keyword hsFunc find -syn keyword hsFunc findIndex -syn keyword hsFunc findIndices -syn keyword hsFunc flip -syn keyword hsFunc floatDigits -syn keyword hsFunc floatRadix -syn keyword hsFunc floatRange -syn keyword hsFunc floatToDigits -syn keyword hsFunc floor -syn keyword hsFunc fmap -syn keyword hsFunc foldl -syn keyword hsFunc foldl1 -syn keyword hsFunc foldM -syn keyword hsFunc foldr -syn keyword hsFunc foldr1 -syn keyword hsFunc formatCalendarTime -syn keyword hsFunc fromEnum -syn keyword hsFunc fromInteger -syn keyword hsFunc fromIntegral -syn keyword hsFunc fromJust -syn keyword hsFunc fromMaybe -syn keyword hsFunc fromRat -syn keyword hsFunc fromRational -syn keyword hsFunc fst - -syn keyword hsFunc gcd -syn keyword hsFunc genericDrop -syn keyword hsFunc genericIndex -syn keyword hsFunc genericLength -syn keyword hsFunc genericReplicate -syn keyword hsFunc genericSplitAt -syn keyword hsFunc genericTake -syn keyword hsFunc getArgs -syn keyword hsFunc getChar -syn keyword hsFunc getClockTime -syn keyword hsFunc getContents -syn keyword hsFunc getCPUTime -syn keyword hsFunc getCurrentDirectory -syn keyword hsFunc getDirectoryContents -syn keyword hsFunc getEnv -syn keyword hsFunc getLine -syn keyword hsFunc getModificationTime -syn keyword hsFunc getPermissions -syn keyword hsFunc getProgName -syn keyword hsFunc getStdGen -syn keyword hsFunc getStdRandom -syn keyword hsFunc group -syn keyword hsFunc groupBy -syn keyword hsFunc guard - -syn keyword hsFunc hClose -syn keyword hsFunc head -syn keyword hsFunc hFileSize -syn keyword hsFunc hFlush -syn keyword hsFunc hGetBuffering -syn keyword hsFunc hGetChar -syn keyword hsFunc hGetContents -syn keyword hsFunc hGetLine -syn keyword hsFunc hGetPosn -syn keyword hsFunc hIsClosed -syn keyword hsFunc hIsEOF -syn keyword hsFunc hIsOpen -syn keyword hsFunc hIsReadable -syn keyword hsFunc hIsSeekable -syn keyword hsFunc hIsWritable -syn keyword hsFunc hLookAhead -syn keyword hsFunc hPrint -syn keyword hsFunc hPutChar -syn keyword hsFunc hPutStr -syn keyword hsFunc hPutStrLn -syn keyword hsFunc hReady -syn keyword hsFunc hSeek -syn keyword hsFunc hSetBuffering -syn keyword hsFunc hSetPosn -syn keyword hsFunc hWaitForInput - -syn keyword hsFunc id -syn keyword hsFunc imagPart -syn keyword hsFunc index -syn keyword hsFunc indices -syn keyword hsFunc init -syn keyword hsFunc inits -syn keyword hsFunc inRange -syn keyword hsFunc insert -syn keyword hsFunc insertBy -syn keyword hsFunc interact -syn keyword hsFunc intersect -syn keyword hsFunc intersectBy -syn keyword hsFunc intersperse -syn keyword hsFunc intToDigit -syn keyword hsFunc ioeGetErrorString -syn keyword hsFunc ioeGetFileName -syn keyword hsFunc ioeGetHandle -syn keyword hsFunc ioError -syn keyword hsFunc isAlpha -syn keyword hsFunc isAlphaNum -syn keyword hsFunc isAlreadyExistsError -syn keyword hsFunc isAlreadyInUseError -syn keyword hsFunc isAscii -syn keyword hsFunc isControl -syn keyword hsFunc isDenormalized -syn keyword hsFunc isDigit -syn keyword hsFunc isDoesNotExistError -syn keyword hsFunc isEOF -syn keyword hsFunc isEOFError -syn keyword hsFunc isFullError -syn keyword hsFunc isHexDigit -syn keyword hsFunc isIEEE -syn keyword hsFunc isIllegalOperation -syn keyword hsFunc isInfinite -syn keyword hsFunc isJust -syn keyword hsFunc isLatin1 -syn keyword hsFunc isLower -syn keyword hsFunc isNaN -syn keyword hsFunc isNegativeZero -syn keyword hsFunc isNothing -syn keyword hsFunc isOctDigit -syn keyword hsFunc isPermissionError -syn keyword hsFunc isPrefixOf -syn keyword hsFunc isPrint -syn keyword hsFunc isSpace -syn keyword hsFunc isSuffixOf -syn keyword hsFunc isUpper -syn keyword hsFunc isUserError -syn keyword hsFunc iterate -syn keyword hsFunc ixmap - -syn keyword hsFunc join - -syn keyword hsFunc last -syn keyword hsFunc lcm -syn keyword hsFunc length -syn keyword hsFunc lex -syn keyword hsFunc lexDigits -syn keyword hsFunc lexLitChar -syn keyword hsFunc liftM -syn keyword hsFunc liftM2 -syn keyword hsFunc liftM3 -syn keyword hsFunc liftM4 -syn keyword hsFunc liftM5 -syn keyword hsFunc lines -syn keyword hsFunc listArray -syn keyword hsFunc listToMaybe -syn keyword hsFunc log -syn keyword hsFunc logBase -syn keyword hsFunc lookup - -syn keyword hsFunc magnitude -syn keyword hsFunc map -syn keyword hsFunc mapAccumL -syn keyword hsFunc mapAccumR -syn keyword hsFunc mapAndUnzipM -syn keyword hsFunc mapM -syn keyword hsFunc mapM_ -syn keyword hsFunc mapMaybe -syn keyword hsFunc max -syn keyword hsFunc maxBound -syn keyword hsFunc maximum -syn keyword hsFunc maximumBy -syn keyword hsFunc maybe -syn keyword hsFunc maybeToList -syn keyword hsFunc min -syn keyword hsFunc minBound -syn keyword hsFunc minimum -syn keyword hsFunc minimumBy -syn keyword hsFunc mkPolar -syn keyword hsFunc mkStdGen -syn keyword hsFunc mod -syn keyword hsFunc msum - -syn keyword hsFunc negate -syn keyword hsFunc newStdGen -syn keyword hsFunc next -syn keyword hsFunc not -syn keyword hsFunc notElem -syn keyword hsFunc nub -syn keyword hsFunc nubBy -syn keyword hsFunc null -syn keyword hsFunc numerator - -syn keyword hsFunc odd -syn keyword hsFunc openFile -syn keyword hsFunc or -syn keyword hsFunc ord -syn keyword hsFunc otherwise - -syn keyword hsFunc partition -syn keyword hsFunc phase -" syn keyword hsFunc pi -syn keyword hsFunc polar -syn keyword hsFunc pred -syn keyword hsFunc print -" syn keyword hsFunc product -syn keyword hsFunc properFraction -syn keyword hsFunc putChar -syn keyword hsFunc putStr -syn keyword hsFunc putStrLn - -syn keyword hsFunc quot -syn keyword hsFunc quotRem - -syn keyword hsFunc random -syn keyword hsFunc randomIO -syn keyword hsFunc randomR -syn keyword hsFunc randomRIO -syn keyword hsFunc randomRs -syn keyword hsFunc randoms -syn keyword hsFunc range -syn keyword hsFunc rangeSize -syn keyword hsFunc read -syn keyword hsFunc readable -syn keyword hsFunc readDec -syn keyword hsFunc readFile -syn keyword hsFunc readFloat -syn keyword hsFunc readHex -syn keyword hsFunc readInt -syn keyword hsFunc readIO -syn keyword hsFunc readList -syn keyword hsFunc readLitChar -syn keyword hsFunc readLn -syn keyword hsFunc readOct -syn keyword hsFunc readParen -syn keyword hsFunc reads -syn keyword hsFunc readSigned -syn keyword hsFunc readsPrec -syn keyword hsFunc realPart -syn keyword hsFunc realToFrac -syn keyword hsFunc recip -syn keyword hsFunc rem -syn keyword hsFunc removeDirectory -syn keyword hsFunc removeFile -syn keyword hsFunc renameDirectory -syn keyword hsFunc renameFile -syn keyword hsFunc repeat -syn keyword hsFunc replicate -syn keyword hsFunc return -syn keyword hsFunc reverse -syn keyword hsFunc round - -syn keyword hsFunc scaleFloat -syn keyword hsFunc scanl -syn keyword hsFunc scanl1 -syn keyword hsFunc scanr -syn keyword hsFunc scanr1 -syn keyword hsFunc searchable -syn keyword hsFunc seq -syn keyword hsFunc sequence -syn keyword hsFunc sequence_ -syn keyword hsFunc setCurrentDirectory -syn keyword hsFunc setPermissions -syn keyword hsFunc setStdGen -syn keyword hsFunc show -syn keyword hsFunc showChar -syn keyword hsFunc showEFloat -syn keyword hsFunc showFFloat -syn keyword hsFunc showFloat -syn keyword hsFunc showGFloat -syn keyword hsFunc showInt -syn keyword hsFunc showList -syn keyword hsFunc showLitChar -syn keyword hsFunc showParen -syn keyword hsFunc shows -syn keyword hsFunc showSigned -syn keyword hsFunc showsPrec -syn keyword hsFunc showString -syn keyword hsFunc significand -syn keyword hsFunc signum -syn keyword hsFunc sin -syn keyword hsFunc sinh -syn keyword hsFunc snd -syn keyword hsFunc sort -syn keyword hsFunc sortBy -syn keyword hsFunc split -syn keyword hsFunc splitAt -" syn keyword hsFunc sqrt -syn keyword hsFunc stderr -syn keyword hsFunc stdin -syn keyword hsFunc stdout -syn keyword hsFunc subtract -syn keyword hsFunc succ -" syn keyword hsFunc sum -syn keyword hsFunc system - -syn keyword hsFunc tail -syn keyword hsFunc tails -syn keyword hsFunc take -syn keyword hsFunc takeWhile -syn keyword hsFunc tan -syn keyword hsFunc tanh -syn keyword hsFunc toCalendarTime -syn keyword hsFunc toClockTime -syn keyword hsFunc toEnum -syn keyword hsFunc toInteger -syn keyword hsFunc toLower -syn keyword hsFunc toRational -syn keyword hsFunc toUpper -syn keyword hsFunc toUTCTime -syn keyword hsFunc transpose -syn keyword hsFunc truncate -syn keyword hsFunc try - -syn keyword hsFunc uncurry -syn keyword hsFunc undefined -syn keyword hsFunc unfoldr -syn keyword hsFunc union -syn keyword hsFunc unionBy -syn keyword hsFunc unless -syn keyword hsFunc unlines -syn keyword hsFunc until -syn keyword hsFunc unwords -syn keyword hsFunc unzip -syn keyword hsFunc unzip3 -syn keyword hsFunc unzip4 -syn keyword hsFunc unzip5 -syn keyword hsFunc unzip6 -syn keyword hsFunc unzip7 -syn keyword hsFunc userError - -syn keyword hsFunc when -syn keyword hsFunc words -syn keyword hsFunc writable -syn keyword hsFunc writeFile - -syn keyword hsFunc zip -syn keyword hsFunc zip3 -syn keyword hsFunc zip4 -syn keyword hsFunc zip5 -syn keyword hsFunc zip6 -syn keyword hsFunc zip7 -syn keyword hsFunc zipWith -syn keyword hsFunc zipWith3 -syn keyword hsFunc zipWith4 -syn keyword hsFunc zipWith5 -syn keyword hsFunc zipWith6 -syn keyword hsFunc zipWith7 -syn keyword hsFunc zipWithM -syn keyword hsFunc zipWithM_ - - -" Constants -syn match hsBoolean "\<\(True\|False\)\>" -syn match hsMaybe "\<\(Nothing\|Just\)\>" -syn match hsConstant "\<\(Left\|Right\)\>" -syn match hsOrdering "\<\(LT\|EQ\|GT\)\>" - - -" Comments -syn match hsLineComment "--.*" -syn region hsBlockComment start="{-" end="-}" contains=hsBlockComment -syn region hsPragma start="{-#" end="#-}" - -" Literate comments--any line not starting with '>' is a comment. -if exists("b:hs_literate_comments") - syn region hsLiterateComment start="^" end="^>" -endif - - -if !exists("hs_minlines") - let hs_minlines = 50 -endif -exec "syn sync lines=" . hs_minlines - -if version >= 508 || !exists("did_hs_syntax_inits") - if version < 508 - let did_hs_syntax_inits = 1 - command -nargs=+ HiLink hi link - else - command -nargs=+ HiLink hi def link - endif - - hi link hsModule hsStructure - hi link hsImport Include - hi link hsImportMod hsImport - hi link hsInfix PreProc - hi link hsStructure Structure - hi link hsStatement Statement - hi link hsConditional Conditional - hi link hsSpecialChar SpecialChar - hi link hsTypedef Typedef - hi link hsVarSym hsOperator - hi link hsConSym hsOperator - hi link hsOperator Operator - hi link hsSpecialCharError Error - hi link hsString String - hi link hsCharacter Character - hi link hsNumber Number - hi link hsFloat Float - hi link hsConditional Conditional - hi link hsLiterateComment hsComment - hi link hsBlockComment hsComment - hi link hsLineComment hsComment - hi link hsComment Comment - hi link hsPragma SpecialComment - hi link hsBoolean Boolean - hi link hsType Type - hi link hsFunc Function - hi link hsMaybe hsEnumConst - hi link hsOrdering hsEnumConst - hi link hsEnumConst Constant - hi link hsConstant Constant - hi link hsDebug Debug - hi link hsCls Debug - - delcommand HiLink -endif - -let b:current_syntax = "haskell" diff --git a/etc/soft/nvim/vimrc b/etc/soft/nvim/vimrc index a90fe8c..c65db22 100644 --- a/etc/soft/nvim/vimrc +++ b/etc/soft/nvim/vimrc @@ -97,6 +97,8 @@ set iminsert=0 " Раскладка по умолчанию - английс "match ErrorMsg '\%>80v.\+' " Подсветка выхода за 80-й символ +match ErrorMsg /\s\+\%#\@> ) -set listchars=tab:>.,trail:+,extends:#,nbsp:. " Показывать табуляцию и висящие пробелы + +" Показывать табуляцию и висящие пробелы +set listchars=tab:▸·,space:·,nbsp:␣,trail:+,eol:¶,precedes:«,extends:» " }}}--------------------------------------------------------------------------- @@ -434,7 +438,7 @@ cnoremap " Редактирование макросов ("X,@") nn @ :='let @'.v:register.' = - \ '.string(getreg(v:register)) + \ '.string(getreg(v:register)) " Редактирование окружений (cib/dap/...) {{{ " Редактирование СЛЕДУЮЩЕГО окружения" @@ -803,20 +807,20 @@ nnoremap n :NnnPicker '%:p:h' " Floating window (neovim) function! s:layout() - let buf = nvim_create_buf(v:false, v:true) + let buf = nvim_create_buf(v:false, v:true) - let height = &lines - (float2nr(&lines / 3)) - let width = float2nr(&columns - (&columns * 2 / 3)) + let height = &lines - (float2nr(&lines / 3)) + let width = float2nr(&columns - (&columns * 2 / 3)) - let opts = { - \ 'relative': 'editor', - \ 'row': 2, - \ 'col': 8, - \ 'width': width, - \ 'height': height - \ } + let opts = { + \ 'relative': 'editor', + \ 'row': 2, + \ 'col': 8, + \ 'width': width, + \ 'height': height + \ } - call nvim_open_win(buf, v:true, opts) + call nvim_open_win(buf, v:true, opts) endfunction let g:nnn#layout = 'call ' . string(function('layout')) . '()' @@ -848,7 +852,7 @@ let g:CheatSheetUrlGetterIdFlag='-b' " cheat sheet base url let g:CheatSheetBaseUrl='https://cht.sh' -" cheat sheet settings do not include style settings neiter comments, +" cheat sheet settings do not include style settings neiter comments, " see other options below let g:CheatSheetUrlSettings='q' @@ -876,7 +880,7 @@ let g:CheatSheetDefaultMode=0 let g:CheatSheetFrameworks = {} imap