title: Why 'Code is not sufficiently generic'?
body: <p>Can anyone explain why the second example below won't compile? </p>
  
  <p>'Test 2' gives "error FS0670: This code is not sufficiently generic. The type variable  ^a could not be generalized because it would escape its scope.". I fail to understand this error message. </p>
  
  <pre><code>// Test 1
  type test1&lt;'a&gt; = | A of 'a 
    with
      override t.ToString() = 
        match t with
        | A a -&gt; a.ToString()
  
  // Test 2
  type test2&lt;'a&gt; = | A of 'a 
    with
      override t.ToString() = 
        match t with
        | A a -&gt; string a
  
  // Test 3
  type test3&lt;'a&gt; = | A of 'a 
    with
      override t.ToString() = 
        match t with
        | A a -&gt; string (a :&gt; obj)
  </code></pre>