pretty-simple

pretty printer for data types with a 'Show' instance.

https://github.com/cdepillabout/pretty-simple

Version on this page:1.0.0.4
LTS Haskell 22.18:4.1.2.0
Stackage Nightly 2024-04-25:4.1.2.0
Latest on Hackage:4.1.2.0

See all snapshots pretty-simple appears in

BSD-3-Clause licensed by Dennis Gosnell
Maintained by [email protected]
This version can be pinned in stack with:pretty-simple-1.0.0.4@sha256:fac591a7aa28389d0a60a9d4c86855c6ff37d5b5aade6aaaa5facf001013bda7,2804

Text.Pretty.Simple

Build Status Hackage Stackage LTS Stackage Nightly BSD3 license

pretty-simple is a pretty printer for Haskell data types that have a Show instance.

For example, imagine the following Haskell data types and values:

data Foo = Foo { foo1 :: Integer , foo2 :: [String] } deriving Show

foo :: Foo
foo = Foo 3 ["hello", "goodbye"]

data Bar = Bar { bar1 :: Double , bar2 :: [Foo] } deriving Show

bar :: Bar
bar = Bar 10.55 [foo, foo]

If you run this in ghci and type print bar, you’ll get output like this:

Bar {bar1 = 10, bar2 = [Foo {foo1 = 3, foo2 = ["hello","goodbye"], foo3 = 3.3},Foo {foo1 = 3, foo2 = ["hello","goodbye"], foo3 = 3.3}], bar3 = 10.55}

This is pretty hard to read. Imagine if there were more fields or it were even more deeply nested. It would be even more difficult to read.

pretty-simple can be used to print bar in an easy-to-read format:

example screenshot

Usage

pretty-simple can be easily used from ghci when debugging.

When using stack to run ghci, just append append the --package flag to the command line to load pretty-simple.

$ stack ghci --package pretty-simple

Once you get a prompt in ghci, you can use import to get pretty-simple’s pPrint function in scope.

> import Text.Pretty.Simple (pPrint)

You can test out pPrint with simple data types like Maybe or tuples.

> pPrint $ Just ("hello", "goodbye")
Just
    ( "hello"
    , "goodbye"
    )

Features

pretty-simple has these features:

  • Easy-to-read
    • Complex data types are simple to understand.
  • Color
    • Prints in color using ANSI escape codes.
    • It is possible to print without color by using the pPrintNoColor function.
  • Rainbox Parentheses
    • Easy to understand deeply nested data types.
  • Configurable Indentation
    • Amount of indentation is configurable with the pPrintOpt function.
  • Fast
    • No problem with data types thousands of lines long.
  • Works with any data type with a Show instance
    • Some common Haskell data types have a Show instance that produces non-valid Haskell code. pretty-simple will pretty-print even these data types.

Why not (some other package)?

Other pretty-printing packages have some combination of these defects:

  • No options for printing in color.
  • No options for changing the amount of indentation
  • Requires every data type to be an instance of some special typeclass (instead of just Show).
  • Requires all Show instances to output valid Haskell code.

Contributions

Feel free to open an issue or PR for any bugs/problems/suggestions/improvements.