-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add 🌟 Scala 3 🌟 support #5
Conversation
val Scala212 = "2.12.19" | ||
val Scala213 = "2.13.13" | ||
val Scala3 = "3.3.3" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps it's the most controversial thing. The recent version of Scala 3 is 3.4.2
. But since Scala 3 doesn't keep forward compatibility between minor versions, we should barely stick with it. Also, Scala 3.3 is an LTS — https://virtuslab.com/blog/technology/scala-3-roadmap-for-2024/#at-least-one-lts-patch-for-every-two-next-patch-releases. Last but not least, many libraries I used to contribute have decided to stick with 3.3. I propose to act similarly.
package contrib.shapeless3 | ||
|
||
trait Replacer[L <: Tuple, U, V]: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As a matter of fact, the full-fledged migration of shapeless-2 to Scala 3 is currently in progress (milessabin/shapeless#1200 — it's such a monumental work, I'm just shocked). So we need to migrate Replacer
and Selector
ourselves for a while.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But yeah, I think some clarifications should be put into the comments. I'll go over it tomorrow.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if the native derivation capabilities of Scala 3 are sufficiently powerful to eschew shapeless altogether?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can imagine a solution powered by a Macro. However, it should also work with Scala 2 Macros. But I don't know if Scala 3 has anything out of pocket for replacing shapeless.Generic
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I meant this: https://docs.scala-lang.org/scala3/reference/contextual/derivation.html#how-to-write-a-type-class-derived-method-using-low-level-mechanisms-1. But after a closer look it does not seem powerful enough (yet?). And I don’t like that using it seems to require writing a lot of asInstanceOf
code.
Whoa! This is awesome! I’ve never even used Scala 3 so happy to trust your judgement. |
The same here 🙈 But it doesn't stop me from contributing to its ecosystem (even if it's not Lean™ as some guys might wish). |
So, I think that version is the ultimate of what I planned to do with it. |
@stanch let me know if I can assist with anything to get this merged. |
Sorry for (another) delay. I have been working on this :D (and this) |
According to https://github.com/stanch/zipper/actions/runs/10134741271/job/28021338445, 0.7.0 is on Sonatype for 2.12, 2.13 (latest, per #6) and 3.3. |
@stanch Wow, it really looks amazing! I can imagine how much joy crafting it brings :) |
Santa appears to have arrived early this year 😄
I'll add some notes on the controversial points below in the PR body.