This repo demonstrates how to use LiquidHaskell as a GHC plugin.
lh-plugin-demo.cabal shows
- how to tell GHC to invoke the plugin
- how to specify the relevant LH wrapper packages as dependencies
stack.yaml shows
- how to point
stackat the relevant LH repositories on github
stack/stack-*.yaml shows
- how to point
stackat the relevant LH packages on hackage
cabal.project.github shows
- how to point
cabalto the relevant LH repositories on github - only works with ghc-9.8.1
No cabal.project file is needed for the releases of liquidhaskell in hackage.
cabal-install should pick the appropriate version for each compiler (supported GHCs:
9.2.8, 9.4.7, 9.6.3, 9.8.1)
By virtue of being a plugin, you now get LH errors
-
when you (re)load in GHCi.
-
from all editor plugins based on
ghciintegration
VSCode running ghcid in a terminal
VSCode with the Simple GHC (Haskell) Integration plugin
Note that, by default, the extension uses Haddock, which is currently incompatible with LiquidHaskell. This repo includes custom .vscode settings to disable hadock, but you can also do it manually in the extension settings by removing :set -haddock from the Ghc Simple › Startup Commands: All section.
Vim/Neovim with ALE and the stack-build linter
Additionally, ghcid produces LH errors on recompilation
For stack-based projects, run with
$ ghcid -c "stack ghci"
For cabal-based projects, run with
$ ghcid -c "cabal v2-repl"
The plugin also ensures that specifications written for one package are used when checking client packages. For an example, see the associated lh-plugin-demo-client package.



