anchor.diff:  // MAIN VERSION WITH TABULATIONS
   let stringify (json : JSON) : string = 
       tabbedStringify "" "  " json
  -
  +//*** TEST Stringification ***//
  +printfn "%s" (plainStringify (parse json))
  +printfn "%s" (stringify (parse json))
  +
  +printfn "%s" (plainStringify (parse json2))
  +printfn "%s" (stringify (parse json2))
   //*** END Stringification ***//
   
   //*** BEGIN Random Generator ***//
  
positive.code:         genObj' [] ((rand MAX_FIELDS) + 1)
      genObj MAX_OBJ_DEPTH
  
  //*** END Random Generator ***//
  
  //*** BEGIN LAB 3 ***//
  // Вариант 6: Составить список из всех повторяющихся ключей двух JSON-объектов //
  
  let getKeys obj: (string list) =
      let rec getKeys' (acc : string list) = function
  
negative.code: 
  
  let jo1 = parse j1
  let jo2 = parse j2
  let jo3 = parse j3
  
  getKeys jo1 // should - ["aba"; "cappa"; "elf"; "f"]
  getKeys jo2 // should - ["elf"; "f"; "newfaq"]
  getKeys jo3 // should - ["newbuilts"; "newfaq"; "f"; "cappa"; "aba"]
  
  getKeysRecursive jo1 // should - ["aba"; "cappa"; "d"; "elf"; "f"]
  getKeysRecursive jo2 // should - ["elf"; "f"; "newfaq"; "faq"; "new"; "aba"]
  getKeysRecursive jo3 // should - ["newbuilts"; "newfaq"; "f"; "cappa"; "aba"]
  
  lab3 jo1 jo2 // should recieve ["elf", "f"]
  lab3 jo1 jo3 // should recieve ["aba"; "cappa"; "f"]
  lab3 jo2 jo3 // should recieve ["f"; "newfaq"]
  
  lab3Recursive jo1 jo2 // should recieve  ["aba"; "elf"; "f"]
  lab3Recursive jo1 jo3 // should recieve ["aba"; "cappa"; "f"]
  lab3Recursive jo2 jo3 // should recieve ["aba"; "f"; "newfaq"]
  
  let lr = generate()
  printfn "%s" (stringify lr)
  lab3 lr lr // should recieve all root keys
  lab3Recursive lr lr // should recieve all keys 
  
  projection jo1 (getKeys jo2)
  // should recieve [("f", JSON_Null); ("elf", JSON_Boolean false)]
  