anchor.diff:              use reader = new BinaryReader(File.Open(bitMapFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
               let nrows = reader.ReadInt32()
               let ncols = reader.ReadInt32()
  -            let createRowBitMap i = BitMap.init ncols (fun i -> reader.ReadBoolean())
  +            let createRowBitMap i = BitMap.ofArray (readBooleansRow ncols reader)
               let map = Array.init nrows createRowBitMap
               BitMap.transform map
               cache.Add(bitMapFileName, map)
  
positive.code:     open BitMap
      let bitmapExtension = ".sbm" // sparse binary map
      let valuesExtension = ".sbv" // sparse binary values
      let writeBitMap fileName (map:bitmap []) =
          use writer = new BinaryWriter(File.Open(fileName, FileMode.OpenOrCreate))
          let nrows = map.Length
          let ncols = (fst map.[0]).Length
          writer.Write(nrows)
          writer.Write(ncols)
  
          let boolArray = Array.init ncols (fun i -> true)
          for (bitarray,_) in map do
              bitarray.CopyTo(boolArray, 0)
              boolArray |> Array.iter (fun b -> (writer.Write(b))) 
  
      let writeValues fileName (values:seq<int option>) =
          use writer = new BinaryWriter(File.Open(fileName, FileMode.OpenOrCreate))
  
negative.code:         writeValues valuesPath values
      
      let cache = new Dictionary<string, bitmap []>()
  
      let readBooleansRow ncols (reader:BinaryReader) =
          let byteToBooleans (b:byte) = Array.init 8 (fun i -> ((pow2 i) &&& int b) > 0)
          let n = Math.Ceiling((float ncols) / 8.0) |> int
          let r = Array.init n (fun i -> byteToBooleans (reader.ReadByte()))
          r |> Seq.concat |> Array.ofSeq
  
      let readBitMap bitMapFileName = 
          if cache.ContainsKey(bitMapFileName) then 
  