Text.Pretty.Simple
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:
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.