anchor.diff:                          (newArgs, newOutput::output))
                       (args, [])
               (args, RecordData(ty, (data |> List.rev |> List.toArray)))
  -        | Union(ty, fields) ->
  +        | ArgUnion(ty, fields) ->
               let data =
                   fields
                   |> Array.zip (ty |> FSharpType.GetUnionCases)
  
positive.code: open System
  open System.IO
  open FSharp.Reflection
  
  /// Add a description to an argument.
  type ArgDescriptionAttribute(description:string) =
      inherit Attribute()
      member __.Description = description
  
  [<RequireQualifiedAccess>]
  module ArgParser =
  
negative.code:             else buildSimpleOptional ty s.Value
          | OptionalBoolData(v) ->
              if v then (box (Some(true))) else box None
          | ListData(ty, li) ->
              li |> buildSimpleList ty
          | RecordData(ty, data) ->
              FSharpValue.MakeRecord(ty, data |> Array.map buildType)
          | UnionData(o) ->
  