instance Read Dynamic ?

Brian Huffman bhuffman@galois.com
Mon, 25 Mar 2002 12:55:48 -0800


On Monday 25 March 2002 12:00 pm, Dean Herington wrote:
> The type `Dynamic` is an instance of `Show` but not of `Read`.  Is there
> some reason `Dynamic` could not be made an instance of `Read`?  Has
> anyone extended `Dynamic` in that way?

Here is a snippet of code from the GHC Dynamic library; you will notice that 
Dynamic objects contain a TypeRep and a data object, but the data object is 
ignored by show (as it must be, since the Obj could be anything, showable or 
not):

data Dynamic = Dynamic TypeRep Obj

instance Show Dynamic where
   -- the instance just prints the type representation.
   showsPrec _ (Dynamic t _) =
          showString "<<" .
	  showsPrec 0 t   .
	  showString ">>"

It is impossible to make a matching Read instance, because you lose 
information when you show a Dynamic object; there is no way a read function 
can reconstruct the data object's value.

It probably wouldn't be too difficult to make a readable version of Dynamic, 
but it would only be able to hold datatypes that were instances of Read and 
Show. I'd be interested to see if anyone else has implemented anything like 
this; it seems like it could be pretty useful.

- Brian Huffman