anchor.diff:              classReader }
           reader
   
  +    /// Get the ReaderFunc for the specified type.
  +    /// The function is either obtained from the cache or built on request
       and getReaderFunc (t : Type) =
           match (!readerCache).TryGetValue t with
           | true, reader -> reader
  
positive.code:         let elemReader = getReaderFunc t
          fun (xml : XmlElem) -> mtd.Invoke(null, [| elemReader; xml |])
  
      and stringArrayReader xml =
          let stringReader = box |> ValueTypeDeserializer.buildValueReader
          listReader<string> stringReader xml |> List.toArray |> box
  
      and byteArrayReader xml =
          let byteReader = Byte.Parse >> box |> ValueTypeDeserializer.buildValueReader
          listReader<byte> byteReader xml |> List.toArray |> box
  
      and getArrayReader (t : Type) = fun () ->
          if not t.IsArray then None else
              if t = typeof<string[]> then Some stringArrayReader
              elif t = typeof<byte[]> then Some byteArrayReader
              else
                  let elem = t.GetElementType()
                  Some <| getTypedArrayReader elem
  
      and getListReader (t : Type) = fun () ->
          if t.IsGenericType then
              let isGenericListType = TypeHelper.isTypeWithGenericType t typedefof<List<_>>
  
negative.code:         let elemReader = getReaderFunc t
          fun (xml : XmlElem) -> mtd.Invoke(null, [| elemReader; xml |])
  
      /// Reader function for arrays
      and arrayReader<'a> (reader : ReaderFunc) xml =
          match xml with
          | GroupElem(_, elems) ->
  