# ghciwatch Ghciwatch loads a [GHCi][ghci] session for a Haskell project and reloads it when source files change. [ghci]: https://downloads.haskell.org/ghc/latest/docs/users_guide/ghci.html ## 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](lifecycle-hooks.md) let you run Haskell code or shell commands on a variety of events. - Run a test suite with [`--test-ghci TestMain.testMain`](cli.md#--test-ghci). - Refresh your `.cabal` files with [`hpack`][hpack] before GHCi starts using [`--before-startup-shell hpack`](cli.md#--before-startup-shell). - Format your code asynchronously using [`--before-reload-shell async:fourmolu`](cli.md#--before-reload-shell). - [Custom globs](cli.md#--reload-glob) 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](cli.md#--clear). - Compilation errors can be written to a file with [`--error-file`](cli.md#--error-file), for compatibility with [ghcid's][ghcid] `--outputfile` option. - Comments starting with `-- $>` [can be evaluated](comment-evaluation.md) 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 `{- $> ... <$ -}`. [ghcid]: https://github.com/ndmitchell/ghcid [hpack]: https://github.com/sol/hpack ## Demo Check out an [asciinema demo][asciinema] to see how ghciwatch feels in practice: [asciinema]: https://asciinema.org/a/659712