title: create stack as abstract data type in haskell
body: <p>I need to create stack data type in haskell to be able to write like this:</p>
  
  <pre><code>let a = emptyStack
  
  push 10 a
  //[10]
  
  pop a 
  []
  </code></pre>
  
  <p>I want push to look like</p>
  
  <pre><code>push :: a -&gt; Stack a -&gt; Stack a
  push a b = a:b
  </code></pre>
  
  <p>but I have problems with syntax, exactly how to declare this new data type, so that</p>
  
  <pre><code>let a = emptyStack 
  :t a
  </code></pre>
  
  <p>would show Stack </p>
  
  <p>any hints on syntax</p>