diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -220,12 +220,11 @@
 ### Release process
 
 ```bash
-vim docvim.cabal # update version number in two places
+vim docvim.cabal # Update version number in two places.
+vim CHANGELOG.md # Update, er, changelog.
 git commit -p # git tag, git push --follow-tags etc...
-cabal check
-cabal sdist
-open dist # upload candidate to https://hackage.haskell.org/packages/candidates/upload
-cabal upload dist/docvim-$VERSION.tar.gz
+stack sdist --pvp-bounds both
+stack upload --pvp-bounds both
 ```
 
 ## Links
diff --git a/docvim.cabal b/docvim.cabal
--- a/docvim.cabal
+++ b/docvim.cabal
@@ -1,330 +1,286 @@
--- Initial docvim.cabal generated by cabal init.  For further
--- documentation, see http://haskell.org/cabal/users-guide/
-
--- The name of the package.
-name:                docvim
-
--- The package version.  See the Haskell package versioning policy (PVP)
--- for standards guiding when and how versions should be incremented.
--- http://www.haskell.org/haskellwiki/Package_versioning_policy
--- PVP summary:      +-+------- breaking API changes
---                   | | +----- non-breaking API additions
---                   | | | +--- code changes with no API change
-version:             0.3.1.3
-
--- A short (one-line) description of the package.
-synopsis:            Documentation generator for Vim plug-ins
-
--- A longer description of the package.
-description:         Produces Vim help and HTML (via Markdown) documentation.
-
--- URL for the project homepage or repository.
-homepage:            https://github.com/wincent/docvim
-
--- The license under which the package is released.
-license:             MIT
-
--- The file containing the license text.
-license-file:        LICENSE.md
-
--- The package author(s).
-author:              Greg Hurrell
-
--- An email address to which users can send suggestions, bug reports, and
--- patches.
-maintainer:          greg@hurrell.net
-
--- A copyright notice.
-copyright:           2015-present Greg Hurrell
-
-category:            Development
-
-build-type:          Simple
-
-extra-source-files:  README.md
-                  -- Created with:
-                  -- :read !find tests/fixtures -type f -and -name '*.vim' -or -name '*.golden'
-                  ,  tests/fixtures/integration/command-t/golden/ast.golden
-                  ,  tests/fixtures/integration/command-t/golden/markdown.golden
-                  ,  tests/fixtures/integration/command-t/golden/plaintext.golden
-                  ,  tests/fixtures/integration/command-t/input/autoload/commandt/isengard.vim
-                  ,  tests/fixtures/integration/command-t/input/autoload/commandt/mirkwood.vim
-                  ,  tests/fixtures/integration/command-t/input/autoload/commandt/private.vim
-                  ,  tests/fixtures/integration/command-t/input/autoload/commandt.vim
-                  ,  tests/fixtures/integration/command-t/input/plugin/command-t.vim
-                  ,  tests/fixtures/integration/ferret/golden/ast.golden
-                  ,  tests/fixtures/integration/ferret/golden/markdown.golden
-                  ,  tests/fixtures/integration/ferret/golden/plaintext.golden
-                  ,  tests/fixtures/integration/ferret/input/autoload/ferret/private/async.vim
-                  ,  tests/fixtures/integration/ferret/input/autoload/ferret/private/dispatch.vim
-                  ,  tests/fixtures/integration/ferret/input/autoload/ferret/private/vanilla.vim
-                  ,  tests/fixtures/integration/ferret/input/autoload/ferret/private.vim
-                  ,  tests/fixtures/integration/ferret/input/ftplugin/qf.vim
-                  ,  tests/fixtures/integration/ferret/input/plugin/ferret.vim
-                  ,  tests/fixtures/integration/loupe/golden/ast.golden
-                  ,  tests/fixtures/integration/loupe/golden/markdown.golden
-                  ,  tests/fixtures/integration/loupe/golden/plaintext.golden
-                  ,  tests/fixtures/integration/loupe/input/autoload/loupe/private.vim
-                  ,  tests/fixtures/integration/loupe/input/plugin/loupe.vim
-                  ,  tests/fixtures/integration/pinnacle/golden/ast.golden
-                  ,  tests/fixtures/integration/pinnacle/golden/markdown.golden
-                  ,  tests/fixtures/integration/pinnacle/golden/plaintext.golden
-                  ,  tests/fixtures/integration/pinnacle/input/autoload/pinnacle.vim
-                  ,  tests/fixtures/integration/scalpel/golden/ast.golden
-                  ,  tests/fixtures/integration/scalpel/golden/markdown.golden
-                  ,  tests/fixtures/integration/scalpel/golden/plaintext.golden
-                  ,  tests/fixtures/integration/scalpel/input/autoload/scalpel.vim
-                  ,  tests/fixtures/integration/scalpel/input/plugin/scalpel.vim
-                  ,  tests/fixtures/integration/terminus/golden/ast.golden
-                  ,  tests/fixtures/integration/terminus/golden/markdown.golden
-                  ,  tests/fixtures/integration/terminus/golden/plaintext.golden
-                  ,  tests/fixtures/integration/terminus/input/autoload/terminus/private.vim
-                  ,  tests/fixtures/integration/terminus/input/plugin/terminus.vim
-                  ,  tests/fixtures/integration/vim-clipper/golden/ast.golden
-                  ,  tests/fixtures/integration/vim-clipper/golden/markdown.golden
-                  ,  tests/fixtures/integration/vim-clipper/golden/plaintext.golden
-                  ,  tests/fixtures/integration/vim-clipper/input/autoload/clipper/private.vim
-                  ,  tests/fixtures/integration/vim-clipper/input/plugin/clipper.vim
-                  ,  tests/fixtures/integration/vim-docvim/golden/ast.golden
-                  ,  tests/fixtures/integration/vim-docvim/golden/markdown.golden
-                  ,  tests/fixtures/integration/vim-docvim/golden/plaintext.golden
-                  ,  tests/fixtures/integration/vim-docvim/input/after/syntax/vim.vim
-                  ,  tests/fixtures/integration/vim-docvim/input/ftplugin/vim.vim
-                  ,  tests/fixtures/markdown/basic-paragraphs.golden
-                  ,  tests/fixtures/markdown/basic-paragraphs.vim
-                  ,  tests/fixtures/markdown/blockquotes.golden
-                  ,  tests/fixtures/markdown/blockquotes.vim
-                  ,  tests/fixtures/markdown/break-tags.golden
-                  ,  tests/fixtures/markdown/break-tags.vim
-                  ,  tests/fixtures/markdown/code.golden
-                  ,  tests/fixtures/markdown/code.vim
-                  ,  tests/fixtures/markdown/fenced.golden
-                  ,  tests/fixtures/markdown/fenced.vim
-                  ,  tests/fixtures/markdown/headings.golden
-                  ,  tests/fixtures/markdown/headings.vim
-                  ,  tests/fixtures/markdown/link-targets.golden
-                  ,  tests/fixtures/markdown/link-targets.vim
-                  ,  tests/fixtures/markdown/links.golden
-                  ,  tests/fixtures/markdown/links.vim
-                  ,  tests/fixtures/markdown/list-items.golden
-                  ,  tests/fixtures/markdown/list-items.vim
-                  ,  tests/fixtures/markdown/ordering-across-docblocks.golden
-                  ,  tests/fixtures/markdown/ordering-across-docblocks.vim
-                  ,  tests/fixtures/markdown/ordering-within-docblocks.golden
-                  ,  tests/fixtures/markdown/ordering-within-docblocks.vim
-                  ,  tests/fixtures/markdown/separator.golden
-                  ,  tests/fixtures/markdown/separator.vim
-                  ,  tests/fixtures/parser/backticks.golden
-                  ,  tests/fixtures/parser/backticks.vim
-                  ,  tests/fixtures/parser/blank-docblock-lines.golden
-                  ,  tests/fixtures/parser/blank-docblock-lines.vim
-                  ,  tests/fixtures/parser/blockquotes.golden
-                  ,  tests/fixtures/parser/blockquotes.vim
-                  ,  tests/fixtures/parser/br-tags.golden
-                  ,  tests/fixtures/parser/br-tags.vim
-                  ,  tests/fixtures/parser/command.golden
-                  ,  tests/fixtures/parser/command.vim
-                  ,  tests/fixtures/parser/commands.golden
-                  ,  tests/fixtures/parser/commands.vim
-                  ,  tests/fixtures/parser/comments.golden
-                  ,  tests/fixtures/parser/comments.vim
-                  ,  tests/fixtures/parser/empty-function.golden
-                  ,  tests/fixtures/parser/empty-function.vim
-                  ,  tests/fixtures/parser/empty.golden
-                  ,  tests/fixtures/parser/empty.vim
-                  ,  tests/fixtures/parser/endfunction.golden
-                  ,  tests/fixtures/parser/endfunction.vim
-                  ,  tests/fixtures/parser/fenced-code-blocks.golden
-                  ,  tests/fixtures/parser/fenced-code-blocks.vim
-                  ,  tests/fixtures/parser/function-autoloaded.golden
-                  ,  tests/fixtures/parser/function-autoloaded.vim
-                  ,  tests/fixtures/parser/function-bang.golden
-                  ,  tests/fixtures/parser/function-bang.vim
-                  ,  tests/fixtures/parser/function-command-variants.golden
-                  ,  tests/fixtures/parser/function-command-variants.vim
-                  ,  tests/fixtures/parser/function-script-local.golden
-                  ,  tests/fixtures/parser/function-script-local.vim
-                  ,  tests/fixtures/parser/function-varargs.golden
-                  ,  tests/fixtures/parser/function-varargs.vim
-                  ,  tests/fixtures/parser/function-with-nested-contents.golden
-                  ,  tests/fixtures/parser/function-with-nested-contents.vim
-                  ,  tests/fixtures/parser/functions-with-attributes.golden
-                  ,  tests/fixtures/parser/functions-with-attributes.vim
-                  ,  tests/fixtures/parser/functions.golden
-                  ,  tests/fixtures/parser/functions.vim
-                  ,  tests/fixtures/parser/headings.golden
-                  ,  tests/fixtures/parser/headings.vim
-                  ,  tests/fixtures/parser/just-whitespace.golden
-                  ,  tests/fixtures/parser/just-whitespace.vim
-                  ,  tests/fixtures/parser/let.golden
-                  ,  tests/fixtures/parser/let.vim
-                  ,  tests/fixtures/parser/lexpr.golden
-                  ,  tests/fixtures/parser/lexpr.vim
-                  ,  tests/fixtures/parser/link-targets.golden
-                  ,  tests/fixtures/parser/link-targets.vim
-                  ,  tests/fixtures/parser/links.golden
-                  ,  tests/fixtures/parser/links.vim
-                  ,  tests/fixtures/parser/list-items.golden
-                  ,  tests/fixtures/parser/list-items.vim
-                  ,  tests/fixtures/parser/lw.golden
-                  ,  tests/fixtures/parser/lw.vim
-                  ,  tests/fixtures/parser/mappings.golden
-                  ,  tests/fixtures/parser/mappings.vim
-                  ,  tests/fixtures/parser/minimal-annotation.golden
-                  ,  tests/fixtures/parser/minimal-annotation.vim
-                  ,  tests/fixtures/parser/options.golden
-                  ,  tests/fixtures/parser/options.vim
-                  ,  tests/fixtures/parser/phrasing-content.golden
-                  ,  tests/fixtures/parser/phrasing-content.vim
-                  ,  tests/fixtures/parser/plugin-annotation.golden
-                  ,  tests/fixtures/parser/plugin-annotation.vim
-                  ,  tests/fixtures/parser/simple-annotations.golden
-                  ,  tests/fixtures/parser/simple-annotations.vim
-                  ,  tests/fixtures/parser/trailing-comment.golden
-                  ,  tests/fixtures/parser/trailing-comment.vim
-                  ,  tests/fixtures/vim/basic-paragraphs.golden
-                  ,  tests/fixtures/vim/blockquotes.golden
-                  ,  tests/fixtures/vim/break-tags.golden
-                  ,  tests/fixtures/vim/code.golden
-                  ,  tests/fixtures/vim/fenced.golden
-                  ,  tests/fixtures/vim/headings.golden
-                  ,  tests/fixtures/vim/link-targets.golden
-                  ,  tests/fixtures/vim/links.golden
-                  ,  tests/fixtures/vim/list-items.golden
-                  ,  tests/fixtures/vim/options.golden
-                  ,  tests/fixtures/vim/options.vim
-                  ,  tests/fixtures/vim/plugin.golden
-                  ,  tests/fixtures/vim/plugin.vim
-
--- Constraint on the version of Cabal needed to build this package.
-cabal-version:       >=1.10
+name: docvim
+version: 0.3.1.4
+cabal-version: >=1.10
+build-type: Simple
+license: MIT
+license-file: LICENSE.md
+copyright: 2015-present Greg Hurrell
+maintainer: greg@hurrell.net
+homepage: https://github.com/wincent/docvim
+synopsis: Documentation generator for Vim plug-ins
+description:
+    Produces Vim help and HTML (via Markdown) documentation.
+category: Development
+author: Greg Hurrell
+extra-source-files:
+    README.md
+    tests/fixtures/integration/command-t/golden/ast.golden
+    tests/fixtures/integration/command-t/golden/markdown.golden
+    tests/fixtures/integration/command-t/golden/plaintext.golden
+    tests/fixtures/integration/command-t/input/autoload/commandt/isengard.vim
+    tests/fixtures/integration/command-t/input/autoload/commandt/mirkwood.vim
+    tests/fixtures/integration/command-t/input/autoload/commandt/private.vim
+    tests/fixtures/integration/command-t/input/autoload/commandt.vim
+    tests/fixtures/integration/command-t/input/plugin/command-t.vim
+    tests/fixtures/integration/ferret/golden/ast.golden
+    tests/fixtures/integration/ferret/golden/markdown.golden
+    tests/fixtures/integration/ferret/golden/plaintext.golden
+    tests/fixtures/integration/ferret/input/autoload/ferret/private/async.vim
+    tests/fixtures/integration/ferret/input/autoload/ferret/private/dispatch.vim
+    tests/fixtures/integration/ferret/input/autoload/ferret/private/vanilla.vim
+    tests/fixtures/integration/ferret/input/autoload/ferret/private.vim
+    tests/fixtures/integration/ferret/input/ftplugin/qf.vim
+    tests/fixtures/integration/ferret/input/plugin/ferret.vim
+    tests/fixtures/integration/loupe/golden/ast.golden
+    tests/fixtures/integration/loupe/golden/markdown.golden
+    tests/fixtures/integration/loupe/golden/plaintext.golden
+    tests/fixtures/integration/loupe/input/autoload/loupe/private.vim
+    tests/fixtures/integration/loupe/input/plugin/loupe.vim
+    tests/fixtures/integration/pinnacle/golden/ast.golden
+    tests/fixtures/integration/pinnacle/golden/markdown.golden
+    tests/fixtures/integration/pinnacle/golden/plaintext.golden
+    tests/fixtures/integration/pinnacle/input/autoload/pinnacle.vim
+    tests/fixtures/integration/scalpel/golden/ast.golden
+    tests/fixtures/integration/scalpel/golden/markdown.golden
+    tests/fixtures/integration/scalpel/golden/plaintext.golden
+    tests/fixtures/integration/scalpel/input/autoload/scalpel.vim
+    tests/fixtures/integration/scalpel/input/plugin/scalpel.vim
+    tests/fixtures/integration/terminus/golden/ast.golden
+    tests/fixtures/integration/terminus/golden/markdown.golden
+    tests/fixtures/integration/terminus/golden/plaintext.golden
+    tests/fixtures/integration/terminus/input/autoload/terminus/private.vim
+    tests/fixtures/integration/terminus/input/plugin/terminus.vim
+    tests/fixtures/integration/vim-clipper/golden/ast.golden
+    tests/fixtures/integration/vim-clipper/golden/markdown.golden
+    tests/fixtures/integration/vim-clipper/golden/plaintext.golden
+    tests/fixtures/integration/vim-clipper/input/autoload/clipper/private.vim
+    tests/fixtures/integration/vim-clipper/input/plugin/clipper.vim
+    tests/fixtures/integration/vim-docvim/golden/ast.golden
+    tests/fixtures/integration/vim-docvim/golden/markdown.golden
+    tests/fixtures/integration/vim-docvim/golden/plaintext.golden
+    tests/fixtures/integration/vim-docvim/input/after/syntax/vim.vim
+    tests/fixtures/integration/vim-docvim/input/ftplugin/vim.vim
+    tests/fixtures/markdown/basic-paragraphs.golden
+    tests/fixtures/markdown/basic-paragraphs.vim
+    tests/fixtures/markdown/blockquotes.golden
+    tests/fixtures/markdown/blockquotes.vim
+    tests/fixtures/markdown/break-tags.golden
+    tests/fixtures/markdown/break-tags.vim
+    tests/fixtures/markdown/code.golden
+    tests/fixtures/markdown/code.vim
+    tests/fixtures/markdown/fenced.golden
+    tests/fixtures/markdown/fenced.vim
+    tests/fixtures/markdown/headings.golden
+    tests/fixtures/markdown/headings.vim
+    tests/fixtures/markdown/link-targets.golden
+    tests/fixtures/markdown/link-targets.vim
+    tests/fixtures/markdown/links.golden
+    tests/fixtures/markdown/links.vim
+    tests/fixtures/markdown/list-items.golden
+    tests/fixtures/markdown/list-items.vim
+    tests/fixtures/markdown/ordering-across-docblocks.golden
+    tests/fixtures/markdown/ordering-across-docblocks.vim
+    tests/fixtures/markdown/ordering-within-docblocks.golden
+    tests/fixtures/markdown/ordering-within-docblocks.vim
+    tests/fixtures/markdown/separator.golden
+    tests/fixtures/markdown/separator.vim
+    tests/fixtures/parser/backticks.golden
+    tests/fixtures/parser/backticks.vim
+    tests/fixtures/parser/blank-docblock-lines.golden
+    tests/fixtures/parser/blank-docblock-lines.vim
+    tests/fixtures/parser/blockquotes.golden
+    tests/fixtures/parser/blockquotes.vim
+    tests/fixtures/parser/br-tags.golden
+    tests/fixtures/parser/br-tags.vim
+    tests/fixtures/parser/command.golden
+    tests/fixtures/parser/command.vim
+    tests/fixtures/parser/commands.golden
+    tests/fixtures/parser/commands.vim
+    tests/fixtures/parser/comments.golden
+    tests/fixtures/parser/comments.vim
+    tests/fixtures/parser/empty-function.golden
+    tests/fixtures/parser/empty-function.vim
+    tests/fixtures/parser/empty.golden
+    tests/fixtures/parser/empty.vim
+    tests/fixtures/parser/endfunction.golden
+    tests/fixtures/parser/endfunction.vim
+    tests/fixtures/parser/fenced-code-blocks.golden
+    tests/fixtures/parser/fenced-code-blocks.vim
+    tests/fixtures/parser/function-autoloaded.golden
+    tests/fixtures/parser/function-autoloaded.vim
+    tests/fixtures/parser/function-bang.golden
+    tests/fixtures/parser/function-bang.vim
+    tests/fixtures/parser/function-command-variants.golden
+    tests/fixtures/parser/function-command-variants.vim
+    tests/fixtures/parser/function-script-local.golden
+    tests/fixtures/parser/function-script-local.vim
+    tests/fixtures/parser/function-varargs.golden
+    tests/fixtures/parser/function-varargs.vim
+    tests/fixtures/parser/function-with-nested-contents.golden
+    tests/fixtures/parser/function-with-nested-contents.vim
+    tests/fixtures/parser/functions-with-attributes.golden
+    tests/fixtures/parser/functions-with-attributes.vim
+    tests/fixtures/parser/functions.golden
+    tests/fixtures/parser/functions.vim
+    tests/fixtures/parser/headings.golden
+    tests/fixtures/parser/headings.vim
+    tests/fixtures/parser/just-whitespace.golden
+    tests/fixtures/parser/just-whitespace.vim
+    tests/fixtures/parser/let.golden
+    tests/fixtures/parser/let.vim
+    tests/fixtures/parser/lexpr.golden
+    tests/fixtures/parser/lexpr.vim
+    tests/fixtures/parser/link-targets.golden
+    tests/fixtures/parser/link-targets.vim
+    tests/fixtures/parser/links.golden
+    tests/fixtures/parser/links.vim
+    tests/fixtures/parser/list-items.golden
+    tests/fixtures/parser/list-items.vim
+    tests/fixtures/parser/lw.golden
+    tests/fixtures/parser/lw.vim
+    tests/fixtures/parser/mappings.golden
+    tests/fixtures/parser/mappings.vim
+    tests/fixtures/parser/minimal-annotation.golden
+    tests/fixtures/parser/minimal-annotation.vim
+    tests/fixtures/parser/options.golden
+    tests/fixtures/parser/options.vim
+    tests/fixtures/parser/phrasing-content.golden
+    tests/fixtures/parser/phrasing-content.vim
+    tests/fixtures/parser/plugin-annotation.golden
+    tests/fixtures/parser/plugin-annotation.vim
+    tests/fixtures/parser/simple-annotations.golden
+    tests/fixtures/parser/simple-annotations.vim
+    tests/fixtures/parser/trailing-comment.golden
+    tests/fixtures/parser/trailing-comment.vim
+    tests/fixtures/vim/basic-paragraphs.golden
+    tests/fixtures/vim/blockquotes.golden
+    tests/fixtures/vim/break-tags.golden
+    tests/fixtures/vim/code.golden
+    tests/fixtures/vim/fenced.golden
+    tests/fixtures/vim/headings.golden
+    tests/fixtures/vim/link-targets.golden
+    tests/fixtures/vim/links.golden
+    tests/fixtures/vim/list-items.golden
+    tests/fixtures/vim/options.golden
+    tests/fixtures/vim/options.vim
+    tests/fixtures/vim/plugin.golden
+    tests/fixtures/vim/plugin.vim
 
 source-repository head
-  type:     git
-  location: https://github.com/wincent/docvim.git
+    type: git
+    location: https://github.com/wincent/docvim.git
 
 source-repository this
-  type:     git
-  location: https://github.com/wincent/docvim.git
-  tag:      0.3.1.3
-
-executable docvim
-  -- .hs or .lhs file containing the Main module.
-  main-is:             Main.hs
-
-  -- Modules included in this executable, other than Main.
-  -- other-modules:
-
-  -- LANGUAGE extensions used by modules in this package.
-  -- other-extensions:
-
-  -- Other library packages from which modules are imported.
-  build-depends:       base >=4.6 && <5
-               ,       docvim
-
-  ghc-options:         -W -Wall
-
-  -- Directories containing source files.
-  hs-source-dirs:      src
-
-  -- Base language which the package is written in.
-  default-language:    Haskell2010
+    type: git
+    location: https://github.com/wincent/docvim.git
+    tag: 0.3.1.4
 
 library
-  build-depends:    base
-               ,    containers
-               ,    directory
-               ,    filepath
+    exposed-modules:
+        Text.Docvim.AST
+        Text.Docvim.CLI
+        Text.Docvim.Compile
+        Text.Docvim.Optimize
+        Text.Docvim.Options
+        Text.Docvim.Parse
+        Text.Docvim.Printer.Markdown
+        Text.Docvim.Printer.Vim
+        Text.Docvim.ReadDir
+        Text.Docvim.Util
+        Text.Docvim.Visitor
+        Text.Docvim.Visitor.Command
+        Text.Docvim.Visitor.Commands
+        Text.Docvim.Visitor.Footer
+        Text.Docvim.Visitor.Function
+        Text.Docvim.Visitor.Functions
+        Text.Docvim.Visitor.Heading
+        Text.Docvim.Visitor.Mapping
+        Text.Docvim.Visitor.Mappings
+        Text.Docvim.Visitor.Option
+        Text.Docvim.Visitor.Options
+        Text.Docvim.Visitor.Plugin
+        Text.Docvim.Visitor.Section
+        Text.Docvim.Visitor.Symbol
+    build-depends:
+        base >=4.8.2.0 && <5,
+        containers >=0.5.6.2 && <0.6,
+        directory >=1.2.2.0 && <1.3,
+        filepath >=1.4.0.0 && <1.5,
+        dlist >=0.7.1.2 && <0.8,
+        lens ==4.13.*,
+        mtl >=2.2.1 && <2.3,
+        optparse-applicative >=0.12.1.0 && <0.13,
+        parsec >=3.1.11 && <3.2,
+        pretty-show >=1.6.10 && <1.7,
+        split >=0.2.3.1 && <0.3
+    default-language: Haskell2010
+    hs-source-dirs: lib
+    other-modules:
+        Paths_docvim
+    ghc-options: -W -Wall
 
-                    -- Third party
-               ,    dlist
-               ,    lens
-               ,    mtl
-               ,    optparse-applicative
-               ,    parsec
-               ,    pretty-show
-               ,    split
-  default-language:    Haskell2010
-  exposed-modules:  Text.Docvim.AST
-                 ,  Text.Docvim.CLI
-                 ,  Text.Docvim.Compile
-                 ,  Text.Docvim.Optimize
-                 ,  Text.Docvim.Options
-                 ,  Text.Docvim.Parse
-                 ,  Text.Docvim.Printer.Markdown
-                 ,  Text.Docvim.Printer.Vim
-                 ,  Text.Docvim.ReadDir
-                 ,  Text.Docvim.Util
-                 ,  Text.Docvim.Visitor
-                 ,  Text.Docvim.Visitor.Command
-                 ,  Text.Docvim.Visitor.Commands
-                 ,  Text.Docvim.Visitor.Footer
-                 ,  Text.Docvim.Visitor.Function
-                 ,  Text.Docvim.Visitor.Functions
-                 ,  Text.Docvim.Visitor.Heading
-                 ,  Text.Docvim.Visitor.Mapping
-                 ,  Text.Docvim.Visitor.Mappings
-                 ,  Text.Docvim.Visitor.Option
-                 ,  Text.Docvim.Visitor.Options
-                 ,  Text.Docvim.Visitor.Plugin
-                 ,  Text.Docvim.Visitor.Section
-                 ,  Text.Docvim.Visitor.Symbol
-  other-modules:    Paths_docvim
-  ghc-options:      -W -Wall
-  hs-source-dirs:   lib
+executable docvim
+    main-is: Main.hs
+    build-depends:
+        base >=4.8.2.0 && <5,
+        docvim >=0.3.1.4 && <0.4
+    default-language: Haskell2010
+    hs-source-dirs: src
+    ghc-options: -W -Wall
 
 test-suite hlint
-  build-depends:    base
-               ,    hlint
-  default-language: Haskell2010
-  ghc-options:      -W -Wall
-  hs-source-dirs:   tests
-  main-is:          HLint.hs
-  type:             exitcode-stdio-1.0
-
+    type: exitcode-stdio-1.0
+    main-is: HLint.hs
+    build-depends:
+        base >=4.8.2.0 && <5,
+        hlint >=1.9.35 && <1.10
+    default-language: Haskell2010
+    hs-source-dirs: tests
+    ghc-options: -W -Wall
 test-suite tasty
-  build-depends:    base >= 4 && < 5
-               ,    bytestring
-               ,    containers
-               ,    deepseq
-               ,    directory
-               ,    dlist
-               ,    docvim
-               ,    filepath
-               ,    lens
-               ,    mtl
-               ,    parsec
-               ,    pretty-show
-               ,    process
-               ,    split
-               ,    tasty
-               ,    tasty-golden
-               ,    tasty-hunit
-               ,    temporary
-  other-modules:     Text.Docvim.AST
-               ,     Text.Docvim.Compile
-               ,     Text.Docvim.Optimize
-               ,     Text.Docvim.Parse
-               ,     Text.Docvim.Printer.Markdown
-               ,     Text.Docvim.Printer.Vim
-               ,     Text.Docvim.Util
-               ,     Text.Docvim.Visitor
-               ,     Text.Docvim.Visitor.Command
-               ,     Text.Docvim.Visitor.Commands
-               ,     Text.Docvim.Visitor.Footer
-               ,     Text.Docvim.Visitor.Function
-               ,     Text.Docvim.Visitor.Functions
-               ,     Text.Docvim.Visitor.Heading
-               ,     Text.Docvim.Visitor.Mapping
-               ,     Text.Docvim.Visitor.Mappings
-               ,     Text.Docvim.Visitor.Option
-               ,     Text.Docvim.Visitor.Options
-               ,     Text.Docvim.Visitor.Plugin
-               ,     Text.Docvim.Visitor.Section
-               ,     Text.Docvim.Visitor.Symbol
-  default-language: Haskell2010
-  ghc-options:      -W -Wall
-  hs-source-dirs:   tests
-                ,   lib
-  main-is:          Tasty.hs
-  type:             exitcode-stdio-1.0
+    type: exitcode-stdio-1.0
+    main-is: Tasty.hs
+    build-depends:
+        base >=4.8.2.0 && <5,
+        bytestring >=0.10.6.0 && <0.11,
+        containers >=0.5.6.2 && <0.6,
+        deepseq >=1.4.1.1 && <1.5,
+        directory >=1.2.2.0 && <1.3,
+        dlist >=0.7.1.2 && <0.8,
+        docvim >=0.3.1.4 && <0.4,
+        filepath >=1.4.0.0 && <1.5,
+        lens ==4.13.*,
+        mtl >=2.2.1 && <2.3,
+        parsec >=3.1.11 && <3.2,
+        pretty-show >=1.6.10 && <1.7,
+        process >=1.2.3.0 && <1.3,
+        split >=0.2.3.1 && <0.3,
+        tasty >=0.11.0.3 && <0.12,
+        tasty-golden >=2.3.1 && <2.4,
+        tasty-hunit >=0.9.2 && <0.10,
+        temporary >=1.2.0.4 && <1.3
+    default-language: Haskell2010
+    hs-source-dirs: tests lib
+    other-modules:
+        Text.Docvim.AST
+        Text.Docvim.Compile
+        Text.Docvim.Optimize
+        Text.Docvim.Parse
+        Text.Docvim.Printer.Markdown
+        Text.Docvim.Printer.Vim
+        Text.Docvim.Util
+        Text.Docvim.Visitor
+        Text.Docvim.Visitor.Command
+        Text.Docvim.Visitor.Commands
+        Text.Docvim.Visitor.Footer
+        Text.Docvim.Visitor.Function
+        Text.Docvim.Visitor.Functions
+        Text.Docvim.Visitor.Heading
+        Text.Docvim.Visitor.Mapping
+        Text.Docvim.Visitor.Mappings
+        Text.Docvim.Visitor.Option
+        Text.Docvim.Visitor.Options
+        Text.Docvim.Visitor.Plugin
+        Text.Docvim.Visitor.Section
+        Text.Docvim.Visitor.Symbol
+    ghc-options: -W -Wall
