title: Anonymous record type inside discriminated union
body: <p>The F# tutorial includes the following snippet:</p>
  
  <pre><code>/// A record for a person's first and last name
  type Person = {     
      First : string
      Last  : string
  }
  
  /// define a discriminated union of 3 different kinds of employees
  type Employee = 
      | Engineer  of Person
      | Manager   of Person * list&lt;Employee&gt;            // manager has list of reports
      | Executive of Person * list&lt;Employee&gt; * Employee // executive also has an assistant
  </code></pre>
  
  <p>The fact that Manager and Executive are described as tuples offends my sensibilities (I'm easily offended).  It strikes me as not terribly expressive.  I tried to modify them as follows:</p>
  
  <pre><code>/// define a discriminated union of 3 different kinds of employees
  type Employee = 
      | Engineer  of Person
      | Manager   of { Name: Person; Reports: Employee list }            // manager has list of reports
      | Executive of { Name: Person; Reports: Employee list; Assistant: Employee}   // executive also has an assistant
  </code></pre>
  
  <p>Sadly, the definitions of Manager and Executive now give an error: "This construct is deprecated; consider using a separate record type instead." Ok, seems fair, let's call it ManagerType. But wait ... ManagerType refers to Employee (for the Reports part), and Employee refers to ManagerType (for the Manager option).</p>
  
  <p>Is there a solution here?  Is it not possible for two data structures to be defined in terms of each other?</p>