show-prettyprint
Robust prettyprinter for output of auto-generated Show instances
https://github.com/quchen/show-prettyprint#readme
Version on this page: | 0.3 |
LTS Haskell 14.27: | 0.3.0.1 |
Stackage Nightly 2019-09-21: | 0.3.0.1 |
Latest on Hackage: | 0.3.0.1@rev:1 |
show-prettyprint-0.3@sha256:c92ff08fa0b0c82f7e98f8453d3f2f267bf72d223f326c3d60e0c179c0326033,1616
Module documentation for 0.3
Prettyprint Show
output
Output of nested data structures by Show
instances is often very hard to read.
This package offers a simple function to insert line breaks and indentation into
that ouput so that the semantics are unchanged, but makes it much easier to
read.
The package does not rely on a parser for actual Haskell; instead, it merely
reacts on parentheses, commas and the like. This makes it fairly robust even in
the face of invalid Show
instances, that may not produce valid Haskell code.
Examples
Artificial
Hello Foo ("(Bar", Haha) (Baz (A { foo = C, bar = D, qux = (E,"He)llo World!",G,
H,[A,B,c,d,e,Fghi]) } ) (B,C) [Baz A1 B2, (Baz A3 (B4)), (Baz A5 (B6)), (Baz
(A7) B8)]) (Foo) (Bar) (Baz (A) (B))
==>
Hello Foo ("(Bar",Haha)
(Baz (A {foo = C
,bar = D
,qux = (E
,"He)llo World!"
,G
,H
,[A,B,c,d,e,Fghi])})
(B,C)
[Baz A1 B2
,(Baz A3 (B4))
,(Baz A5 (B6))
,(Baz (A7) B8)])
(Foo)
(Bar)
(Baz (A) (B))
Inspired by a real AST
Set (fromList [(Name "A string with (parenthesis",Ann (Entry (Quality 1 1)
(Ann False) (Ann (Map [Ann (Bound (Ann (Id "lorem"))),Ann (Variable
(Ann (Id "ipsum")))])))),(Name "string",Ann (Entry (Quality 1 1) (Ann
True) (Ann (Internal (Ann (Reduce (Ann (Id "dolor")) (Ann (Id "sit")))))
))),(Name "Another } here",Ann (Entry (Quality 1 1) (Ann (Or [Ann (Not
(Ann (Is (Ann Flagged) (Ann Type) (Ann (Multi [Ann (Literal (Ann One))
]))))),Ann (Is (Ann Flagged) (Ann Type) (Ann (Multi [Ann (Literal (Ann
Three))]))),Ann (Is (Ann Flagged) (Ann Type) (Ann (Multi [Ann (Literal
(Ann Two))])))])) (Ann (Internal (Ann (Concat (Ann (Id "amet"))))))))])
==>
Set (fromList [(Name "A string with (parenthesis"
,Ann (Entry (Quality 1 1)
(Ann False)
(Ann (Map [Ann (Bound (Ann (Id "lorem")))
,Ann (Variable (Ann (Id "ipsum")))]))))
,(Name "string"
,Ann (Entry (Quality 1 1)
(Ann True)
(Ann (Internal (Ann (Reduce (Ann (Id "dolor"))
(Ann (Id "sit"))))))))
,(Name "Another } here"
,Ann (Entry (Quality 1 1)
(Ann (Or [Ann (Not (Ann (Is (Ann Flagged)
(Ann Type)
(Ann (Multi [Ann (Literal (Ann One))])))))
,Ann (Is (Ann Flagged)
(Ann Type)
(Ann (Multi [Ann (Literal (Ann Three))])))
,Ann (Is (Ann Flagged)
(Ann Type)
(Ann (Multi [Ann (Literal (Ann Two))])))]))
(Ann (Internal (Ann (Concat (Ann (Id "amet"))))))))])
Changes
0.3
- Fix lists not being prettified at the top level (#6)
- Fix lists in nested data structures not being aligned (#6)
0.2.3
- Fix escaping of backslashes (#5)
- Fix a bug with ambiguous types on newer cabal new-repl runs (#4)
0.2.{1,2}
Add functions to prettify to Doc
instead of just supporting String
,
prettifyToDoc :: String -> Doc ann
prettyShowDoc :: Show a => a -> Doc ann
0.2.0.1
Tagged the wrong version as 0.2 on Github. Releasing a new version with an updated tag to remedy this.
0.2
Prettyprint based on the prettyprinter
library, instead of ansi-wl-pprint
.
To support the Diagnostic
module, the Trifecta-generated Doc
has to be
rendered still, so we cannot drop the dependency on ansi-wl-pprint just yet.