
simonmar:
On 21 October 2005 08:43, Johannes Waldmann wrote:
Georg made the point that if a type is an instance of Show, then it should also be an instance of Read, and read . show == id
I rather think that this should be an explicit design requirement for Read/Show instances in the libraries, along with the requirement that the Show instance outputs valid Haskell syntax that can be included in a program (assuming appropriate imports, and possibly an appropriate type signature). Show is not for pretty-printing, it is for serialising.
Are there any Show instances that violate these requirements in the base/haskell98 packages currently?
The ones I can think of off the top of my head. Of course, these are weird for various reasons though: > show $ toDyn (1::Int) -- Dynamic has no Read "<<Int>>" > show $ typeOf (1::Int) -- TypeRep as no Read "Int" PackedString has no Read, but could have one. Due to Autrijus: instance Read FastString where readsPrec p str = [ (pack x, y) | (x, y) <- readsPrec p str ] or some tricky packed version a la Binary and .hi files. None of these is terribly troubling though, I think. -- Don