anchor.diff:              | x, y -> subdivide q SE
                       |> insert p
   
  +
  +let rec remove (p : Point) (q: QuadTree) =
  +    match p |> contains q.Bound with
  +    | false -> false
  +    | true ->
  +        match q.Data.TryTake (ref p) with
  +        | true -> true
  +        | false ->
  +            match p.Lat, p.Lng with
  +            | x, y when x >= q.Bound.Center.Lat && y >= q.Bound.Center.Lng
  +                ->  match getSubQuadTree q.Node NW with
  +                    | None -> true // or should it be false ?
  +                    | Some q ->  remove p q
  +            | x, y when x >= q.Bound.Center.Lat && y < q.Bound.Center.Lng
  +                ->  match getSubQuadTree q.Node SW with
  +                    | None -> true // or should it be false ?
  +                    | Some q ->  remove p q
  +            | x, y when x < q.Bound.Center.Lat && y >= q.Bound.Center.Lng
  +                ->  match getSubQuadTree q.Node NE with
  +                    | None -> true // or should it be false ?
  +                    | Some q ->  remove p q
  +            | x, y 
  +                ->  match getSubQuadTree q.Node SE with
  +                    | None -> true // or should it be false ?
  +                    | Some q ->  remove p q
  +
  +
  +let findClosest (p: Point) (q: QuadTree) =
  +    let distance p' =
  +        (p'.Lat - p.Lat)**2.0 + (p'.Lng - p.Lng)**2.0
  +    let minimum (m : Point option) ( m' : Point option) =
  +        match m, m' with
  +        | None, None -> None
  +        | None, _ -> m'
  +        | _, None -> m
  +        | Some point, Some point' ->
  +            seq [point; point']
  +            |> Seq.minBy distance
  +            |> Option.Some
  +    let rec findClosest' (min : Point option)  (q' : QuadTree) =
  +        match q.Data.IsEmpty with
  +        | true -> min
  +        | false ->
  +            let min' =
  +                q'.Data
  +                |> Seq.minBy distance
  +                |> Option.Some
  +                |> minimum min
  +            match p.Lat, p.Lng with
  +            | x, y when x >= q'.Bound.Center.Lat && y >= q'.Bound.Center.Lng
  +                ->  match getSubQuadTree q'.Node NW with
  +                        | None -> min'
  +                        | Some q -> findClosest' min' q
  +            | x, y when x >= q'.Bound.Center.Lat && y < q'.Bound.Center.Lng
  +                ->  match getSubQuadTree q'.Node SW with
  +                    | None -> min'
  +                    | Some q -> findClosest' min' q
  +            | x, y when x < q'.Bound.Center.Lat && y >= q'.Bound.Center.Lng
  +                ->  match getSubQuadTree q'.Node NE with
  +                    | None -> min'
  +                    | Some q -> findClosest' min' q
  +            | x, y 
  +                ->  match getSubQuadTree q'.Node SE with
  +                    | None -> min'
  +                    | Some q -> findClosest' min' q
  +
  +    match p |> contains q.Bound with
  +    | false -> None
  +    | true -> findClosest' None q
  +    
  
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: module QuadTree
  
  open System.Collections.Concurrent
  
  type Point = { Lat :float; Lng : float}
  type Bound = { Center : Point; HalfDimension : float }
  
  type Direction =
      | NW 
  