if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haskell') == -1

*haskell-vim.txt*                                     Last Change 2016 March 14
===============================================================================
===============================================================================

===============================================================================
CONTENTS                                                   *haskell-vim-contents*

  1. Features      |haskell-vim-features|
  2. Configuration |haskell-vim-configuration|
  3. Highlighting  |haskell-vim-indentation|

===============================================================================
FEATURES                                                   *haskell-vim-features*

  * Covers a broader spectrum of keywords
  * Highlighting for new features like type families, pattern synonyms,
    arrow syntax, recursive do, role annotations, QuasiQuotation
  * More contextual highlighting
    (e.g. highlight "as" or "family" only in appropriate places)
  * Smarter indentation
  * Better Cabal support

===============================================================================
CONFIGURATION                                         *haskell-vim-configuration*

To enable the features you would like to use, just add the according line to
your `.vimrc`.

===============================================================================
HIGHLIGHTING                                           *haskell-vim-highlighting*

`haskell-vim` can highlight additional keywords. This is enabled by setting
the according variable to 1 in the `.vimrc`.

  * |haskell-vim-enable-quantification|
  * |haskell-vim-enable-recursivedo|
  * |haskell-vim-enable-arrowsyntax|
  * |haskell-vim-enable-pattern-synonyms|
  * |haskell-vim-enable-typeroles|
  * |haskell-vim-enable-static-pointers|
  * |haskell-vim-classic-highlighting|
  * |haskell-vim-disable-TH|

                                               *haskell-vim-enable-quantification*
`g:haskell_enable_quantification`   Enables highlighting of `forall`.

                                                  *haskell-vim-enable-recursivedo*
`g:haskell_enable_recursivedo`      Enables highlighting of `mdo` and `rec`.

                                                 *haskell-vim-enable-arrowsyntax*
`g:haskell_enable_arrowsyntax`      Enables highlighting of `proc`.

                                            *haskell-vim-enable-pattern-synonyms*
`g:haskell_enable_pattern_synonyms` Enables highlighting of the `pattern` keyword.

                                                    *haskell-vim-enable-typeroles*
`g:haskell_enable_typeroles`        Enables highlighting of the `role` keyword, as
                                  well as `phantom`, `norminal` and
                                  `representational`.

                                              *haskell-vim-enable-static-pointers*
`g:haskell_enable_static_pointers`  Enables highlighting of the `static` keyword.

                                                *haskell-vim-classic-highlighting*
`haskell-vim` has an opinionated highlighting. If you do not like that you can
switch to a more traditional mode by setting `g:haskell_classic_highlighting`
to 1.

                                                *haskell-vim-disable-TH*
Disabling Template Haskell and Quasiquoting syntax is possible by setting
`g:haskell_disable_TH` to `1`.

===============================================================================
INDENTATION                                             *haskell-vim-indentation*

To configure indentation in `haskell-vim` you can use the following variables to
change indentation depth, just add the according line to your `.vimrc`.

You can disable the indentation by setting `g:haskell_indent_disable` to `1`.

Haskell~

  * |haskell-vim-indent-if|
  * |haskell-vim-indent-case|
  * |haskell-vim-indent-let|
  * |haskell-vim-indent-where|
  * |haskell-vim-indent-before-where|
  * |haskell-vim-indent-after-bare-where|
  * |haskell-vim-indent-do|
  * |haskell-vim-indent-in|
  * |haskell-vim-indent-guard|
                                                           *haskell-vim-indent-if*
* let g:haskell_indent_if = 3 >

        if bool
        >>>then ...
        >>>else ...
<

                                                         *haskell-vim-indent-case*
* let g:haskell_indent_case = 2 >

        case xs of
        >>[]     -> ...
        >>(y:ys) -> ...
<
                                                          *haskell-vim-indent-let*
* let g:haskell_indent_let = 4 >

        let x = 0 in
        >>>>x
<
                                                        *haskell-vim-indent-where*
* let g:haskell_indent_where = 6 >

        where f :: Int -> Int
        >>>>>>f x = x
<
                                                 *haskell-vim-indent-before-where*
* let g:haskell_indent_before_where = 2 >

        foo
        >>where
<
                                             *haskell-vim-indent-after-bare-where*
* let g:haskell_indent_after_bare_where = 2 >

        where
        >>foo
<
                                                           *haskell-vim-indent-do*
* let g:haskell_indent_do = 3 >

        do x <- a
        >>>y <- b
<
                                                           *haskell-vim-indent-in*
* let g:haskell_indent_in = 1 >

        let x = 1
        >in x
<
                                                        *haskell-vim-indent-guard*
* let g:haskell_indent_guard = 2 >

        f x y
        >>|
<

Cabal~

  * |cabal-vim-indent-section|

                                                        *cabal-vim-indent-section*
* let g:cabal_indent_section = 2 (limited to max. 4 spaces) >

        executable name
        >>main-is:             Main.hs
<

endif
