title: Is there a pretty printing (or showing) abstraction in Haskell?
body: <p>Is there no standard way to print out values for end-user consumption? <code>Show</code> is clearly more of a debugging convenience than something that would work for this purpose, given the conventions around its use and the constraint that <code>read (show x) == x</code>.</p>
  
  <p>For example, isn't there at least a simple package like</p>
  
  <pre><code>class (Show a) =&gt; PShow a where 
      pshow :: a -&gt; String
      pshow = show
  
  pprint :: (PShow a) =&gt; a -&gt; IO () 
  pprint = putStrLn . pshow
  </code></pre>
  
  <p>where instances do something like</p>
  
  <pre><code>instance PShow MyType where
      pshow a = someUserFriendlyStringOf a
  </code></pre>
  
  <p>Note that I'm not asking for something that provides elaborate pretty printing and formatting functionality (I see several packages that do that) just for a simple abstraction that's widely used that allows for pretty printing. Is there something like this? </p>