Renamed Cooperative to NativeSupport, because have since created an easy
path to non-native cooperative equality (EnabledEqualityBetween).
Added CooperatingBoolean support and added StrictCheckedEquality and StrictEnabledEquality policies.
Added more tests for isIn so that in addition to being tested under
CheckedEquality it was also tested under Unchecked- and EnabledEquality.
The EnabledEquality one had some compiler errors because some things
weren't enabled. Took me a while to figure out what was not enabled, but
one thing was Tuple2, which is needed for Scala Maps, and java.util.Map.Entry,
which is needed for Java Maps. Along the way I noticed that should === syntax
was still requiring a Constraint instead of an EqualityConstraint. Fixing that
brought to the surface the need to make some conversions from Equivalence to
EqualityConstraint (for explicitly DSL or otherwise explicitly provided
Equivalences) implicit under the old policies, which brought to the surface
the need to move pairs of them up to LowPriority traits. All and all a fine
day of yak shaving, with the end result that the isIn syntax is tested
under all policies, and ready for indexIn and lastIndexIn.
Saving tests I wrote for indexIn and lastIndexIn syntax, because when going
to implement the code I realized it would require that I add methods to
SequencingConstraint. Want to think about whether that's worth it.
Added HashingEquivalence to use in EquiSet.
Decided to use HashingEquality instead of HashingEquivalence, to make it
easier to back the EquiSet with a regular one containing wrapped values.
Added a toString to EquiSet and a Wrapped nested class, and backed
it by a Set[Wrapped].
Added a union method that takes another EquiSet with the same path-dependent
type: typeclass coherence Scala style!
Prettified some toStrings.
Added + and toSet methods to EquiSet. Neat stuff.
Added + and - methods, intersect, diff, &, &-, and | methods to EquiSet.