(compare [1] [2]) ;; -1 is ok because vecotors are Comparable.
(compare '(1) '(2)) ;; BOOM throws an exception because lists are not Comparable, it's expected.
(compare ['(1)] ['(2)]) ;; BOOM it is also expected.
(db/value-compare [1] [2]) ;; -1
(db/value-compare '(1) '(2)) ;; -22.. it works because lists are compared by hash
(db/value-compare ['(1)] ['(2)]) ;; BOOM This case is too strange, I can compare vectors and lists but I can't compare vectors of lists.
I can wrap my vectors in a hash-map or a list and it works: (db/value-compare {:value ['(1)]} {:value ['(2)]}). But it's a hack.
Should we provide our own Compare protocol with hash support? In this case, we have to repeat a .compareTo method for all collections. It looks like .compareTo but calls our value-compare instead of Util/compare https://github.com/clojure/clojure/blob/c1ede7899d8d7dd4dcd6072d5c0f072b9b2be391/src/jvm/clojure/lang/APersistentVector.java#L439
This issue has a low priority.
(compare [1] [2]) ;; -1is ok because vecotors are Comparable.(compare '(1) '(2)) ;; BOOMthrows an exception because lists are not Comparable, it's expected.(compare ['(1)] ['(2)]) ;; BOOMit is also expected.(db/value-compare [1] [2]) ;; -1(db/value-compare '(1) '(2)) ;; -22..it works because lists are compared byhash(db/value-compare ['(1)] ['(2)]) ;; BOOMThis case is too strange, I can compare vectors and lists but I can't compare vectors of lists.I can wrap my vectors in a hash-map or a list and it works:
(db/value-compare {:value ['(1)]} {:value ['(2)]}). But it's a hack.Should we provide our own Compare protocol with hash support? In this case, we have to repeat a
.compareTomethod for all collections. It looks like.compareTobut calls ourvalue-compareinstead ofUtil/comparehttps://github.com/clojure/clojure/blob/c1ede7899d8d7dd4dcd6072d5c0f072b9b2be391/src/jvm/clojure/lang/APersistentVector.java#L439This issue has a low priority.