title: Haskell data type
body: <p>Let's say that I have a type like this (that works): </p>
  
  <pre><code>data WAE = Num Float
           | Id String
           | With [(String, WAE)] WAE -- This works, but I want to define it as below
           deriving(Eq, Read, Show)
  </code></pre>
  
  <p>I want a type like this (doesn't work):</p>
  
  <pre><code>data WAE = Num Float
           | Id String
           | With [(Id, WAE)] WAE -- This doesn't work ("Id not in scope")
           deriving(Eq, Read, Show)
  </code></pre>
  
  <p>Why can't I do that in Haskell? Any ideas in achieveing a similar effect?</p>