Awesome
ghciwatch
<a href="https://repology.org/project/ghciwatch/versions"> <img src="https://repology.org/badge/vertical-allrepos/ghciwatch.svg?header=" alt="Packaging status"> </a> <br> <a href="https://repology.org/project/rust:ghciwatch/versions"> <img src="https://repology.org/badge/vertical-allrepos/rust:ghciwatch.svg?header=" alt="Packaging status"> </a> <br> <a href="https://mercurytechnologies.github.io/ghciwatch/"> <img src="https://img.shields.io/badge/User%20manual-mercurytechnologies.github.io%2Fghciwatch-blue" alt="User manual"> </a>Ghciwatch loads a GHCi session for a Haskell project and reloads it when source files change.
Features
- GHCi output is displayed to the user as soon as it's printed.
- Ghciwatch can handle new modules, removed modules, or moved modules without a hitch
- A variety of lifecycle
hooks
let you run Haskell code or shell commands on a variety of events.
- Run a test suite with
--test-ghci TestMain.testMain
. - Refresh your
.cabal
files withhpack
before GHCi starts using--before-startup-shell hpack
. - Format your code asynchronously using
--before-reload-shell async:fourmolu
.
- Run a test suite with
- Custom globs can be supplied to reload or restart the GHCi session when non-Haskell files (like templates or database schema definitions) change.
- Ghciwatch can clear the screen between reloads.
- Compilation errors can be written to a file with
--error-file
, for compatibility with ghcid's--outputfile
option. - Comments starting with
-- $>
can be evaluated in GHCi.- Eval comments have access to the top-level bindings of the module they're defined in, including unexported bindings.
- Multi-line eval comments are supported with
{- $> ... <$ -}
.
Demo
Check out a quick demo to see how ghciwatch feels in practice:
<a href="https://asciinema.org/a/659712" target="_blank"><img src="https://asciinema.org/a/659712.svg" /></a>
Learn More
Developing ghciwatch
See CONTRIBUTING.md
for information on hacking
ghciwatch.