Introduce GhciMonad and generalize types of functions in GHCi.UI
authorZejun Wu <watashi@fb.com>
Tue, 22 Jan 2019 00:28:01 +0000 (16:28 -0800)
committerBen Gamari <ben@smart-cactus.org>
Thu, 31 Jan 2019 17:46:51 +0000 (12:46 -0500)
commite08974e81ccc84b5887d13cc4752fde9a78c51fb
tree0c2d12762972c39f29c25c650735bd5b3570dc38
parent1be81c50b51d0c9c651cbdd14bb7cf6884d011ff
Introduce GhciMonad and generalize types of functions in GHCi.UI

Summary:
Introduce `GhciMonad`, which is bascially `GhcMonad` + `HasGhciState`.
Generalize the commands and help functions defined in `GHCi.UI` so they
can be used as both `GHCi a` and `InputT GHCi a`.

The long term plan is to move reusable bits to ghci library and make it
easier to build a customized interactive ui which carries customized state
and provides customized commands.

Most changes are trivial in this diff by relaxing the type constraint or
add/remove lift as necessary. The non-trivial changes are:

* Change `HasGhciState` to `GhciMonad` and expose it.
* Implementation of `reifyGHCi`.

Test Plan:
  ./validate

Reviewers: simonmar, hvr, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

Differential Revision: https://phabricator.haskell.org/D5433
ghc/GHCi/UI.hs
ghc/GHCi/UI/Monad.hs