heap-console: interactively inspect Haskell values at runtime

[ bsd3, language, library ] [ Propose Tags ]

See the README.md file in the project repository.

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS],
Change log CHANGELOG.md
Dependencies base (>= && <4.15), containers (>= && <0.7), exceptions (>=0.10.4 && <0.11), ghc-heap (>=8.10.2 && <8.11), ghc-prim (>=0.6.1 && <0.7), haskeline (>=0.8.1 && <0.9), mtl (>=2.2.2 && <2.3), show-combinators (>=0.2 && <0.3) [details]
License BSD-3-Clause
Copyright 2020 TheMatten
Author TheMatten
Maintainer matten@tuta.io
Category Language
Home page https://gitlab.com/thematten/heap-console
Bug tracker https://gitlab.com/thematten/heap-console/issues
Source repo head: git clone git://gitlab.com/thematten/heap-console.git
Uploaded by TheMatten at 2020-11-21T13:56:44Z
Downloads 250 total (1 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2020-11-21 [all 1 reports]

Readme for heap-console-

[back to package description]

heap-console 🔎

Debugging - the classic mystery game where you are the detective, the victim, and the murderer!

Some poor developer

Quite a common approach in Haskell for debugging programs is to use Debug.Trace - problem is that what we often want to do is not to print random strings, but to inspect the state of the program. Debuggers are meant for this, but they can be tricky to set up, may require speicific graphical tools to be somewhat convenient, and it's easy to forget to run your program through one while iterating through changes in code.

heap-console let's you inspect your values at runtime using simple combinators, resuming execution once you close it:

> import Heap.Console
> inspect (42, 'a')
[Entering heap-view - use `:help` for more information]
heap-console> it
(_, 'a')
heap-console> !it
(42, 'a')
heap-console> it.1
heap-console> :exit
[Exiting heap-view]
(42, 'a')

If you give it Data instance, it can recognize records too:

> :set -XDeriveDataTypeable
> data Foo = Foo{ bar :: Int, baz :: String } deriving Data
> inspectAD $ Foo 65 "Hello World!"
[Entering heap-view - use `:help` for more information]
heap-console> !it
Foo {bar = 65, baz = "Hello World!"}
heap-console> it.baz
"Hello World!"
heap-console> ^D
[Exiting heap-view]

And you can bind values for inspection in random places, getting to them once it makes sense:

> evidenceD "foo" [1,2,3]
> inspection
[Entering heap-view - use `:help` for more information]
heap-console> foo
[1, 2, 3]
heap-console> ^D
[Exiting heap-view]

To see more features, take a look at documentation, or simply try :help command.