MyNixOS website logo
Description

interactively inspect Haskell values at runtime.

See the README.md file in the project repository.

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.

Metadata

Version

0.1.0.1

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows