hlint-plugin: GHC plugin for hlint

[ bsd3, library, unclassified ] [ Propose Tags ]

This package provides a GHC plugin that runs hlint on the compiled module. The main advantages of doing this are: (A) better integration with GHC tooling, (B) only linting modules that change, and (C) only parsing the module once. . Note that this package will only build if you build the hlint dependency with -f-ghc-lib and build the ghc-lib-parser-ex dependency with -fno-ghc-lib

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 1.0.0, 1.0.1, 1.0.2
Change log CHANGELOG.md
Dependencies base (>= && <5), containers, ghc (>=9.0 && <9.8), hlint (>=3.3 && <3.7) [details]
License BSD-3-Clause
Copyright 2023 Mercury Technologies
Author Mercury Technologies
Maintainer gabriella@mercury.com
Uploaded by GabrielGonzalez at 2023-09-19T17:20:19Z
Downloads 98 total (7 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for hlint-plugin-1.0.2

[back to package description]


This is a revival of the splint project to create an hlint plugin for GHC.

The main advantages of doing this are:

  • Better integration with GHC tooling

    Now hlint errors will appear directly in your tools (e.g. cabal build ghcid, haskell-language-server) instead of you having to run hlint out of band.

  • You only have to lint modules that you rebuild

  • You don't have to parse the module twice

In order to build this plugin, you will need to:

  • build the hlint package with the -f-ghc-lib cabal configure option
  • build the ghc-lib-parser-ex package with the -fno-ghc-lib cabal configure option

To use this plugin, add this package as a build dependency and then enable the following GHC options (typically in the ghc-options: field of your .cabal file):

-fplugin HLint.Plugin

You can pass command-line options to hlint using -fplugin-opt, like this:

-fplugin HLint.Plugin -fplugin-opt='HLint.Plugin:--ignore=Redundant guard'


This repository uses Nix for development. You can build this package entirely using Nix for a specific version of ghc by running:

$ nix develop .#ghc${MAJOR}${MINOR}

… replacing ${MAJOR} and ${MINOR} with the major and minor version of the ghc that you're using. For example, if you're using GHC 9.4, then you'd run:

$ nix build .#ghc94

If you want to develop interactively using Cabal inside of a Nix shell, run:

$ nix develop .#ghc${MAJOR}${MINOR}

Once you are inside that Nix shell, then you can use cabal commands, like cabal build or cabal repl. You can also use ghcid or launch your favorite IDE from inside this shell.

To check that this plugin works for all supported GHC versions, run:

$ nix flake check