Most datatypes implement Show in such a way that the result is a valid Haskell code (maybe with some extensions turned on, but still). However, before fixing the Show instance, I would consider a better way to encode Books. E.g. something like this (although I'm not sure if it's possible):
Book [#age =: 30, #name =: "Jane"]