title: Haskell : recursive data type (Parameterized Types)
body: <p>I have this :</p>
  
  <pre><code>data Val s i a = S s | I i | A a deriving (Show)
  </code></pre>
  
  <p>To play with non-homogenous lists in Haskell. So I can do something like (just an example function ):</p>
  
  <pre><code>oneDown :: Val String Int [String]-&gt; Either String String
  </code></pre>
  
  <p>But I would actually like this to be a list of Vals, i.e. something like :</p>
  
  <pre><code>oneDown :: Val String Int [Val]-&gt; Either String String
  </code></pre>