private static <T> T throwTypeError() {
        throw new GremlinTypeErrorException();
    }
By routing through the compare(f, s) path we expose ourselves to type errors, which should be
reduced to false for equality:

compare(NaN, anything) -> ERROR -> FALSE for equality
compare(Type1, Type2) -> ERROR -> FALSE for equality

Can also happen for elements nested inside of collections.
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/GremlinValueComparator.java