anchor.diff:              | RecordValue items -> 
                   recordValueL depthLim (Array.toList items)
   
  -            | UnionCaseValue (_,constr,recd) when // x is List<T>. Note: "null" is never a valid list value. 
  +            | UnionCaseValue (constr,recd) when // x is List<T>. Note: "null" is never a valid list value. 
                                                       x<>null && isListType (x.GetType()) ->
                   listValueL depthLim constr recd
   
  -            | UnionCaseValue(declaringType, unionCaseName, recd) ->
  -                unionCaseValueL depthLim prec declaringType unionCaseName (Array.toList recd)
  +            | UnionCaseValue(unionCaseName, recd) ->
  +                unionCaseValueL depthLim prec unionCaseName (Array.toList recd)
   
               | ExceptionValue(exceptionType, recd) ->
                   fsharpExceptionL depthLim prec exceptionType (Array.toList recd)
  
positive.code:                     | _ -> false
                  if isNullaryUnion then
                      let nullaryCase = FSharpType.GetUnionCases ty |> Array.filter (fun uc -> uc.GetFields().Length = 0) |> Array.item 0
                      let declaringType =
                          if requiresQualifiedAccess ty then Some ty
                          else None
                      UnionCaseValue(declaringType, nullaryCase.Name, [| |])
                  elif isUnitType ty then UnitValue
                  else NullValue
              | _ -> 
  
negative.code:         | null -> None 
          | _ -> 
              match Value.GetValueInfo bindingFlags (x, ty) with
              | UnionCaseValue ("Cons", recd) -> Some (unpackCons recd)
              | UnionCaseValue ("Empty", [| |]) -> None
              | _ -> failwith "List value had unexpected ValueInfo"
  
      let structL = wordL (tagKeyword "struct")
  