title: Using GADT variants in a polymorphic, compound type as I would normal algebraic variant types?
body: <p>Let's say I have this simple variant-type:</p>
  
  <pre><code>type flag = {
    name: string;
    payload: string option;
  }
  
  type word =
   | Arg of string
   | Flag of flag
  
  let args = [|
    Arg "hello";
    Flag {name = "foo"; payload = Some "world"};
  |]
  </code></pre>
  
  <p>If, however, I want to add GADT-constraints to that <code>word</code> type,</p>
  
  <pre><code>type _ word =
   | Arg : string -&gt; string word
   | Flag : flag -&gt; flag word
  </code></pre>
  
  <p>… the compiler can no longer infer a general type for the members of <code>args</code>:</p>
  
  <pre><code>Line 12, 3:
    This expression has type flag word
         but an expression was expected of type string word
         Type flag is not compatible with type string
  </code></pre>
  
  <p>Is this simply a limitation of GADTs?</p>