anchor.diff:              |> Some
           else None
   
  +    let getValueParser t =
  +        match Type.GetTypeCode(t) with
  +        | TypeCode.Boolean -> Boolean.Parse >> box |> Some
  +        | TypeCode.Byte -> Byte.Parse >> box |> Some
  +        | TypeCode.Int16 -> Int16.Parse >> box |> Some
  +        | TypeCode.Int32 -> Int32.Parse >> box |> Some
  +        | TypeCode.Int64 -> Int64.Parse >> box |> Some
  +        | TypeCode.Char -> Char.Parse >> box |> Some
  +        | TypeCode.DateTime -> DateTime.Parse >> box |> Some
  +        | TypeCode.Decimal -> Decimal.Parse >> box |> Some
  +        | TypeCode.Double -> Double.Parse >> box |> Some
  +        | TypeCode.SByte -> SByte.Parse >> box |> Some
  +        | TypeCode.Single -> Single.Parse >> box |> Some
  +        | TypeCode.UInt16 -> UInt16.Parse >> box |> Some
  +        | TypeCode.UInt32 -> UInt32.Parse >> box |> Some
  +        | TypeCode.UInt64 -> UInt64.Parse >> box |> Some
  +        | TypeCode.String -> box |> Some
  +        | _ -> None
  +
       let getValueReader (t : Type) = fun () ->
  -        let reader =
  -            match Type.GetTypeCode(t) with
  -            | TypeCode.Boolean -> Boolean.Parse >> box |> Some
  -            | TypeCode.Byte -> Byte.Parse >> box |> Some
  -            | TypeCode.Int16 -> Int16.Parse >> box |> Some
  -            | TypeCode.Int32 -> Int32.Parse >> box |> Some
  -            | TypeCode.Int64 -> Int64.Parse >> box |> Some
  -            | TypeCode.Char -> Char.Parse >> box |> Some
  -            | TypeCode.DateTime -> DateTime.Parse >> box |> Some
  -            | TypeCode.Decimal -> Decimal.Parse >> box |> Some
  -            | TypeCode.Double -> Double.Parse >> box |> Some
  -            | TypeCode.SByte -> SByte.Parse >> box |> Some
  -            | TypeCode.Single -> Single.Parse >> box |> Some
  -            | TypeCode.UInt16 -> UInt16.Parse >> box |> Some
  -            | TypeCode.UInt32 -> UInt32.Parse >> box |> Some
  -            | TypeCode.UInt64 -> UInt64.Parse >> box |> Some
  -            | TypeCode.String -> box |> Some
  -            | _ -> None
  -        match reader with
  +        match getValueParser t with
           | Some r -> Some(buildValueReader r)
           | _ -> None
   
  
positive.code: 
      /// Determine the property and its PropertyReaderInfo in case
      /// XML attributes are supported
      and determinePropertyWithAttribute (pDict : Dictionary<string, PropertyReaderInfo>, aDict : Dictionary<string, PropertyReaderInfo>) pi =
          match getAttribute<SharpXml.Common.XmlAttributeAttribute> pi with
          | Some attr ->
              let name = if notWhite attr.Name then attr.Name else pi.Name
              aDict.Add(name, buildReaderInfo pi)
          | _ ->
              let name = getPropertyName pi
              pDict.Add(name, buildReaderInfo pi)
  
negative.code:     Ctor : EmptyConstructor }
  
  /// Record type containing the deserialization information
  /// for XML attribute properties
  type internal AttributeReaderInfo = {
      Info : System.Reflection.PropertyInfo
      Reader : string -> obj
      Setter : SetterFunc
      Ctor : EmptyConstructor }
  
  /// Record type containing the deserialization information
  /// of a specific type and all its members that have to be deserialized
  type internal TypeBuilderInfo = {
      Type : System.Type
      // TODO: I would love to use case-insensitive FSharpMaps instead
      Props : System.Collections.Generic.Dictionary<string, PropertyReaderInfo>
      Attrs : System.Collections.Generic.Dictionary<string, AttributeReaderInfo>
      Ctor : EmptyConstructor }
  
  /// Record type containing the deserialization information
  