pretty-simple: pretty printer for data types with a 'Show' instance.

[ bsd3, library, text ] [ Propose Tags ]

Please see

[Skip to Readme]
Versions [faq],,,,,,,,,,,,,,,,,,,,,,,
Dependencies ansi-terminal (>= && <0.7), base (>= && <4.10), containers (>= && <0.6), lens (==4.14.*), mono-traversable (>=1.0.1 && <1.1), mtl (>=2.2.1 && <2.3), parsec (>=3.1.11 && <3.2), pretty-simple (>= && <1.1), semigroups (>=0.18.2 && <0.19), text (>= && <1.3), transformers (>= && <0.6) [details]
License BSD-3-Clause
Copyright 2017 Dennis Gosnell
Author Dennis Gosnell
Category Text
Home page
Source repo head: git clone
Uploaded by cdepillabout at Sun Jan 15 17:48:37 UTC 2017
Distributions Debian:, LTSHaskell:, NixOS:, Stackage:
Executables pretty-simple-example
Downloads 7339 total (385 in the last 30 days)
Rating 2.5 (votes: 4) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2017-01-15 [all 1 reports]





Build a small example program showing how to use the pPrint function


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

For package maintainers and hackage trustees

Readme for pretty-simple-

[back to package description]


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


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")
    ( "hello"
    , "goodbye"


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.


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