title: No instance for (Show a0) arising from a use of `print' in Haskell
body: <p>I am new in Haskell. The topic is from Learn you Haskell book "recursive data structures"</p>
  
  <p>Here is my code</p>
  
  <pre><code>data List a = Empty | Cons a (List a) deriving (Show, Read, Eq, Ord) 
  
  main = do
      print $ Empty
      print $ 5 `Cons` Empty 
      print $ 4 (Cons 5 Empty)  
      print $ 3 `Cons` (4 `Cons` (5 `Cons` Empty))
  </code></pre>
  
  <p>and here is the error message I get</p>
  
  <pre><code>No instance for (Show a0) arising from a use of `print'
  The type variable `a0' is ambiguous
  Possible fix: add a type signature that fixes these type variable(s)
  Note: there are several potential instances:
    instance Show a =&gt; Show (List a)
  </code></pre>