title: Pretty print discriminated unions
body: <p>I have an <code>Option</code> type:</p>
  
  <pre><code>type Option&lt;'a&gt; =
      | Some of value:'a
      | None
  
  type MyString = string
  
  // Syntax
  type type-name =
      | case-identifier1 [of [ fieldname1 : ] type1 [ * [ fieldname2 : ] type2 ...]
      | case-identifier2 [of [ fieldname3 : ] type3 [ * [ fieldname4 : ] type4 ...]
  ...
  </code></pre>
  
  <p>I want to print something with a format like this:</p>
  
  <pre><code>"type-name: case-identifier(fieldname1:type1:'value1', fieldname2:type2:'value2')"
  
  // Example:
  let a : Option&lt;MyString&gt; = Some "1"
  print a -&gt; "Option: Some(value:MyString:'1')"
  let b = None
  print b -&gt; "Option: None"
  </code></pre>
  
  <p>I've asked a <a href="https://stackoverflow.com/questions/43981211/print-case-identifier-of-discriminated-union">similar question</a> before, but I still can't get the type-name and type of the field.</p>