public static Variance DetailedCompare <T>(this T val1, T val2, string fieldName)
 {
     return(typeof(IEnumerable).IsAssignableFrom(typeof(T))
                 ?   TExtensions.enumerableCompare(val1, val2, fieldName)
                 :   typeof(T).IsPrimitive
                     ?   TExtensions.valueCompare(val1, val2, fieldName)
                     :   TExtensions.objectCompare(val1, val2, fieldName));
 }