anchor.diff:                  Buffer.BlockCopy(arrObj, 0, buffer, curPos, sizeInBytes)
                   memStream.Position <- newLen
   
  -    let writePrimitiveArray : Type * int[] * int[] * Array -> unit = 
  -        let writePrimitiveArrayOneByOne(elType: Type, lowerBounds: int[], lengths: int[], arrObj: Array) = 
  -            match Type.GetTypeCode(elType) with
  +    let writePrimitiveArray : SerTypeInfo * int[] * int[] * Array -> unit = 
  +        let writePrimitiveArrayOneByOne(arrayTypeInfo: SerTypeInfo, lowerBounds: int[], lengths: int[], arrObj: Array) = 
  +            match Type.GetTypeCode(arrayTypeInfo.Type.GetElementType()) with
               | TypeCode.Boolean -> let arr = arrObj :?> Boolean[] in arr |> Array.iter stream.Write
               | TypeCode.Byte -> let arr = arrObj :?> Byte[] in arr |> Array.iter stream.Write
               | TypeCode.SByte -> let arr = arrObj :?> SByte[] in arr |> Array.iter stream.Write
  
positive.code:         | TypeCode.Single -> upcast reader.ReadSingle()
          | _ -> failwith <| sprintf "Unknown primitive type %A" objType
  
      let readMemoryBlittableArray (elType: Type, arrObj: Array, memStream: MemoryStream) =
          let elemSize = (typeSerializer.GetSerTypeInfo elType).GetSize()
          match memStream with
              | :? BufferListStream<byte> as ms ->
                  ms.ReadArrT(arrObj, 0, arrObj.Length, elemSize) |> ignore
  
negative.code: 
      let DeserConstructorArgTypes = [| typeof<SerializationInfo>; typeof<StreamingContext> |]
  
      let intArrayTypeInfo = typeSerializer.GetSerTypeInfo(typeof<int[]>)
  
      member private this.ReadArray (arrayTypeInfo: SerTypeInfo, lowerBounds: int[], lengths: int[], arrObj: Array) =
          let elType = arrayTypeInfo.Type.GetElementType()
          if elType.IsPrimitive then
              readPrimitiveArray arrayTypeInfo arrObj
          elif elType.IsValueType then 
              readValueArray (typeSerializer.GetSerTypeInfo elType) lowerBounds lengths arrObj
          else 
              readObjectArray lowerBounds lengths arrObj
  
      member private this.ReadContents (objType: SerTypeInfo, obj: byref<obj>) : unit = 
          for field in objType.SerializedFields do 
              let fieldType = field.FieldType
              if fieldType.IsPrimitive then
                  let value = readPrimitive fieldType
  