heap-console: interactively inspect Haskell values at runtime

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

See the README.md file in the project repository.


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.0, 0.1.0.1
Change log CHANGELOG.md
Dependencies base (>=4.14.1.0 && <4.15), containers (>=0.6.2.1 && <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-20T21:27:38Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for heap-console-0.1.0.0

[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
'a'
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.