-
Notifications
You must be signed in to change notification settings - Fork 93
Add missing Functor instance for Tuple2 #572
Conversation
This is required for 9.6.1. |
Dear @vincenthz , would you mind doing a new release with this fix to enable basement with ghc-9.6 please. |
Is there any reason why this has not been merged? Is there any help I can offer? |
I doubt this PR has any chance of ever being merged. This change adds a Functor instance that simply makes no sense. |
Why does it make no sense? And how can it have a |
I can understand why adding the I believe it should be possible to implement the |
I don't understand. Isn't the point of this thread that since the quantified constraint was added to |
@tomjaguarpaw the If I have tuples, why does mapping over only the second component make sense all of a sudden? Why not over the first? What makes the second special? I design a data type, I should be free to chose what instances make sense; but instead here I am forced to provide an instance that I might fundamentally disagree with wrt to my data type. Why provide mapping over only the second component, why not first? Why do I need this if I have I know that from a set theoretic perspective we might argue a tuple is a mapping, but that is a major assumption. Maybe I’m modeling So the option then is to implement Maybe the solution instead is to drop the In any case, lots of unnecessary churn (add or remove instance, just for compatibility; cutting a release, …, downstream bounds adjustments, …) a lot of work for maintainers of this and consuming packages, for what? None of them really reap any benefit from this, but are burdened with a lot of work for virtually no benefit except “compiles with 9.6+ now”. And it’s not like this came with a warning for ~2+ releases that would have shown the real world impact of this change. I’m digressing. I’ve made my stance on this backwards compatibility, breaking changes topic clear. And I’m actively trying to work towards it. Edit: updated some spelling mistakes. |
as some previously captured here, the whole point of not having Functor was to not have biased implementation available to the user. This is hugely disappointing again from the ghc / base maintainers to completely change the semantics of a class after multiple major releases, and fly in the face of stability and backwards compatibility that are required to have a decent ecosystem and language. Ultimately this and the many previous (and likely future) cases of unilateral pointless changes, hurts Haskell adoption to the point that now I don't see a future in this and have actively stirred away from using it (or recommending its use anywhere). |
I don't get the argument that |
|
@sergv do you get the argument that the class semantic has changed between versions ? Because that's what it is about here. It has a narrower meaning than what it started with. |
This doesn't hold much weight for me.
The underlying semantics haven't changed at all. Exactly the same |
this is factually false @tomjaguarpaw, I cannot provide the bifunctor instance anymore now without adding something I do not want (the Functor instance). |
I guess that's a debate around the semantics of "sematics" then :D To me "semantics of a type class staying the same" means (roughly) that you can give the same instances with the same implementations. For example, for me, the "semantics" of |
This conversation is turning sterile. I have no interest in wasting time further on this topic, this specific change broke my use case and change what Bifunctor meant (to me), now I cannot use it. If you cannot see that it has an impact on the stability of the language/libraries and this (and other kind of similar changes that we endured in the past) are harmful to the language adoption and maintainers, then it's even more lost than I imagined. |
Adresses haskell/core-libraries-committee#91