anchor.diff:              |> Some
           else None
   
  +    /// Reader function for F# discriminated union types
       and readUnion (ui : UnionBuilderInfo) attr (xml : ParserInfo) =
  +        // TODO: instead of returning null on failure or
  +        // unknown union cases we could return a default value
  +        // (i.e. the union case with tag 0) instead
           if not xml.IsEnd then
               let name, tag = eatTag xml
               let lower = name.ToLowerInvariant()
  
positive.code:             |> Map.ofArray
          { Type = t; Readers = readers; Ctor = FSharpValue.PreComputeRecordConstructor t; Fields = fields.Length }
  
      and readRecord (rb : RecordBuilderInfo) attr (xml : ParserInfo) =
          let objects = Array.zeroCreate<obj> rb.Fields
          let rec inner() =
  
negative.code:             |> Map.ofArray
          { Type = t; Readers = getUnionReaders }
  
      /// Try to determine a F# discriminated union reader
      and getFsUnionReader (t : Type) = fun() ->
          if FSharpType.IsUnion t then
              getUnionBuilderInfo t
  