I guess you want an automatically derived show that indents, but if
you don't mind defining you own, Data.PrettyPrint is really nice.

Here is an example that produces roughly the same as your example:

import Data.PrettyPrint

tree2doc Leaf = text "Leaf"
tree2doc (Bin x l r) =
    text "Bin" $$
    nest 2 (text (show x) $$
            tree2doc l $$
            tree2doc r)

showTree = render . tree2doc


/Johan

2012/3/13 Johan Tibell <[email protected]>:
> Hi all,
>
> The derived Show instance is useful, but I sometimes wish for
> something that's easier to read for big data types. Does anyone have
> an implementation of show that draws things in a hierarchical manner?
> Example:
>
> Given
>
>    data Tree a = Leaf | Bin Int a (Tree a) (Tree a)
>
> and
>
>    value = Bin 1 (Bin 2 Leaf Leaf) (Bin 3 Leaf Leaf)
>
> draw as
>
> Bin
>  1
>  Bin
>    2
>    Leaf
>    Leaf
>  Bin
>    3
>    Leaf
>    Leaf
>
> Cheers,
> Johan
>
> _______________________________________________
> Haskell-Cafe mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to