anchor.diff:          // as suggested in http://stackoverflow.com/a/8543850
           let isDotNet45OrNewer =
               lazy(Type.GetType("System.Reflection.ReflectionContext") <> null)
  -
  -//        // TODO: include in serialization header
  -//        let versionTag = 
  -//            let version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
  -//            sprintf "FsPickler-v%O" version
   
           /// stackless raise operator
           let inline raise (e: System.Exception) = (# "throw" e : 'U #)
  
positive.code:                     cache'.TryAdd(s,t) |> ignore
                      t
  
  
  //        // produces a structural hashcode out of a byte array
  //        let getByteHashCode (bs : byte []) =
  //            let n = bs.Length
  //            let mutable i = 0
  //            let mutable acc = 0
  //
  //            let inline bytes2Int x y z w = 
  //                int x + (int y <<< 8) + (int z <<< 16) + (int w <<< 24)
  //
  //            while i + 4 <= n do
  //                acc <- acc ^^^ bytes2Int bs.[i] bs.[i + 1] bs.[i + 2] bs.[i + 3]
  //                i <- i + 4
  //
  //            match n - i with
  //            | 0 -> ()
  //            | 1 -> acc <- acc ^^^ bytes2Int bs.[i] 0uy 0uy 0uy
  //            | 2 -> acc <- acc ^^^ bytes2Int bs.[i] bs.[i+1] 0uy 0uy
  //            | _ -> acc <- acc ^^^ bytes2Int bs.[i] bs.[i+1] bs.[i+2] 0uy
  //
  //            acc
  
          [<RequireQualifiedAccess>]
          module Stream =
  
  
negative.code:                     do readBytes r
                      Buffer.BlockCopy(buf, 0, array, d * bufferSize, r)
  
          type SerializationInfo with
              member sI.Write<'T> (name : string, x : 'T) =
                  sI.AddValue(name, x, typeof<'T>)
  
              member sI.Read<'T>(name : string) =
                  sI.GetValue(name, typeof<'T>) :?> 'T
  
          let inline pickle (f : Stream -> 'T -> unit) (x : 'T) : byte [] =
              use mem = new MemoryStream()
  