title: Why explicit derivation of Show/Read in Haskell?
body: <p>We can't do <code>read someValue :: someDataType</code> or <code>show someValue</code> for every type because <code>deriving (Show, Read)</code> has to be written in the <code>data</code> declarations. Is there a case, other than mistake, where we don't want our type to be serializable?
  Why is Show separated from Read? Is there a case, other than mistake, we only want to show some data and not read it? If not, why not have a single data type <code>Serializable</code>?</p>
  
  <p>Just now, I'm using <a href="http://hackage.haskell.org/packages/archive/gloss/1.7.4.1/doc/html/Graphics-Gloss-Interface-Pure-Game.html#t%3aKey" rel="nofollow">the <code>Key</code> datatype of the Gloss library</a> which derives <code>Show</code> and not <code>Read</code>, which I don't understand. It's a shame because I wanted to put the configuration of the controls in a file and then read it, so the player can change the controls and have his own configuration.
  I had to do wrappers for Key, SpecialKey and MouseButton, which is not a big deal but is useless.</p>
  
  <pre><code>data Key' = Char' Char | SpecialKey' SpecialKey | MouseButton' MouseButton
      deriving (Eq, Ord, Show, Read)
  convertKey x = case x of
      Char' c -&gt; Char c
      SpecialKey' sk -&gt; SpecialKey sk
      MouseButton' mb -&gt; MouseButton mb
  </code></pre>