anchor.diff:  module QuadTree
   
  +open System.Collections.Concurrent
  +
   type Point = { Lat :float; Lng : float}
  -type Bound = { Center : Point; HalfDimension :float }
  -
  +type Bound = { Center : Point; HalfDimension : float }
   
   type Direction =
       | NW 
  
positive.code:     | SW
      | SE
      
  type Node = { NW: QuadTree option ; NE: QuadTree option ; SE: QuadTree option; SW: QuadTree option }
  and QuadTree = { Bound : Bound; Max : int; mutable Index : int; mutable Data : Point array; mutable Node : Node option }
  
  let emptyNode = {NW = None; NE = None; SW = None; SE = None }
  
  
negative.code:             q.Node <- Some {emptyNode with SE = Some(nq) }
              nq
  
  let getSubQuadTree (n: Node option) (d :Direction) : QuadTree option =
      match n with
      | None -> None
      | Some n' ->
          match d with
          | NW -> n'.NW
          | NE -> n'.NE
          | SW -> n'.SW
          | SE -> n'.SE
  
  
  let rec insert (p: Point)(q : QuadTree)  =
      match p |> contains q.Bound with
      | false -> false
      | true ->
          match q.Data.Count < q.Max with
          | true -> 
              q.Data.Add p
              true
          | false ->
              match p.Lat, p.Lng with
              | x, y when x >= q.Bound.Center.Lat && y >= q.Bound.Center.Lng
                  -> subdivide q NW
                      |> insert p
              | x, y when x >= q.Bound.Center.Lat && y < q.Bound.Center.Lng
                  -> subdivide q SW
                      |> insert p
  