I just like to add that I find it very useful to be able to just copy the output of show to ghci. As an example, I wrote an AI that used a game tree as state. When debugging, I can just print this tree after each turn using show and then paste it to ghci to simulate the game starting from the state at that turn. If Show was not valid Haskell code, I would have had to write a serializer a d deserializer first, which isn't so easy to do for a tree structure.
--
Benno