anchor.diff:          | Int64 i -> i |> BitConverter.GetBytes |> packInt
           | Float32 f -> [| yield DataType.Float32; yield! BitConverter.GetBytes f |]
           | Float64 f -> [| yield DataType.Float64; yield! BitConverter.GetBytes f |]
  -        | String s -> [|  |]
  +        | String s -> packString s
           | Array a when Array.length a < 16 ->
               [| yield DataType.FixArray.[Array.length a]
                  yield! Array.collect pack a |] 
  
positive.code: 
          let res = pack bytes (Array.length bytes)
          match Array.length res with
          | 1 -> [| yield DataType.Int8; yield! res |]
          | 2 -> [| yield DataType.Int16; yield! res |]
          | 4 -> [| yield DataType.Int32; yield! res |]
          | 8 -> [| yield DataType.Int64; yield! res |]
          | _ -> failwith "Cannot happen. failing encode int"
  
      let rec pack = function
          | Nil -> [| DataType.Nil |]
  
negative.code: module MsgPack 
  
  open System
  open System.Text
  
  module private DataType =
      let PositiveFixNum = [| 0x00uy..0x7fuy |]
      let FixMap = [| 0x80uy..0x8fuy |]
      let FixArray = [| 0x90uy..0x9fuy |]
      let FixString = [| 0xa0uy..0xbfuy |]
  