Comments (4)
@hiroshi-cl I see what you mean. My math is a bit rusty, but I think you want an Equivalence relation:
https://en.wikipedia.org/wiki/Equivalence_relation
but what Eq is really about is an Equality:
https://en.wikipedia.org/wiki/Equality_(mathematics)
Eq is about "...asserting that the quantities have the same value."
this text in Equivalence Relation describes:
Equality is both an equivalence relation and a partial order. Equality is also the only relation on a set that is reflexive, symmetric and antisymmetric. In algebraic expressions, equal variables may be substituted for one another, a facility that is not available for equivalence related variables. The equivalence classes of an equivalence relation can substitute for one another, but not individuals within a class.
I would say you want a new type class, like:
trait Equivalence[A] {
def equiv(a: A, b: A): Boolean
}
The problem with equivalence is you probably don't want any of them to be implicit. For the whole type class pattern to work you really want there to be one privileged instance for a given type. With an Equivalence relation, that's not really the case.
How does that sound?
from cats.
It's a weird name. It doesn't seem to be anything about antisymmetry.
It's more that any pure function that maps A to itself preserves Eq.
Why would you expect that? I guess it is some argument about if two A values are eqv than any transformation of them into other As should preserve that equality.
It's weird if you think a1 == a2 but then f(a1) != f(a2) by the same Eq.
So, I think the law is sensible but where I comes from I don't recall.
from cats.
Thank you for your reply.
it is some argument about if two A values are eqv than any transformation of them into other As should preserve that equality.
It's weird if you think a1 == a2 but then f(a1) != f(a2) by the same Eq.
No. It's not obvious property and too strong restriction.
Many equality don't satisfy this law and only homomorphic
transformations can preserve their equality.
For example, let's think about def eq(a: Int, b: Int): Boolean = a % 6 == b % 6
.
In this case, (x: Int) => x / 3
doesn't preserve this equality.
3 == 9 but (3 / 3) != (9 / 3)
from cats.
I'm not convinced what you mean but introducing a new type class sounds a good idea.
Thank you.
from cats.
Related Issues (20)
- `Tuple1SemigroupalOps` methods have different names from other `TupleNSemigroupalOps` classes HOT 3
- Instances for Currency HOT 7
- EitherT[Option, ?, ?]] can't be used as a bifunctor HOT 5
- trait EuclidianRing should not be a Ring HOT 4
- OutOfMemoryError when IO.uncancelable is used in recursive function HOT 1
- ambiguous implicit resolution of `Show.ContravariantShow[immutable.SortedMap[K, V]]` HOT 1
- Should Monad extend Defer? HOT 11
- Support Scala Native 0.5 HOT 3
- Adding an alternative version of the method whenA with a different signature
- `Eval` thread safety HOT 4
- Optimize `distinct`/`distinctBy` implementations for non-empty collections
- [PROPOSAL] Aliases for methods `traverse_` and `sequence_` HOT 7
- Any reason `intercalate` isn't exposed directly on the `Semigroup` companion object? HOT 3
- (very breaking) change in Future instances? HOT 5
- Reveal internal but public identifiers and make them `private[cats]`
- Cats Order needs an `orElseBy` combinator HOT 8
- Loss of type safety in scala 3 under certain conditions
- Make Later covariant in its type parameter
- Ease awkward constructions when doing something before raising HOT 1
- A flaky test fired in `CokleisliSuite` on the Native Platform
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cats.