Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Conversation

@wisechengyi
Copy link
Collaborator

@wisechengyi wisechengyi commented Nov 1, 2025

2.12 bump to match more closely with prod.

2.13 bump needed other org.scalameta" % "semanticdb-scalac-core" % "4.9.9" does not exist for 2.13.6.

Verification

2.12:
image

2.13:
image

@wisechengyi wisechengyi changed the title bump scala 2.12 to 2.12.20 Bump scala 2.12 to 2.12.20 Nov 1, 2025
@wisechengyi wisechengyi changed the title Bump scala 2.12 to 2.12.20 Bump scala from 2.12.15 to 2.12.20 Nov 1, 2025
@wisechengyi wisechengyi marked this pull request as ready for review November 1, 2025 03:57

// coursier doesn't have instances for ZIO built in
implicit def zioSync[R]: Sync[RIO[R, ?]] = new Sync[RIO[R, ?]] {
implicit def zioSync[R]: Sync[RIO[R, *]] = new Sync[RIO[R, *]] {
Copy link
Collaborator Author

@wisechengyi wisechengyi Nov 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

● This change is about the syntax for type lambdas (type-level functions) in the kind-projector compiler plugin.

  What It Means

  Original Code (with ?)

  implicit def zioSync[R]: Sync[RIO[R, ?]] = new Sync[RIO[R, ?]] {

  Updated Code (with *)

  implicit def zioSync[R]: Sync[RIO[R, *]] = new Sync[RIO[R, *]] {

  Explanation

  The Problem Being Solved

  Sync is a type class that expects a type constructor with one type parameter (like F[_]), but RIO has two type parameters: RIO[R, A].

  To make RIO fit, you need to "partially apply" it - fix the first parameter R and leave the second parameter A as a hole.

  What RIO[R, ?] / RIO[R, *] Means

  Both syntaxes mean: "A type constructor that takes one type parameter and produces RIO[R, <that parameter>]"

  For example:
  - RIO[R, *] applied to String = RIO[R, String]
  - RIO[R, *] applied to Int = RIO[R, Int]

  This is equivalent to writing:
  // Without kind-projector (verbose):
  type RIOPartiallyApplied[A] = RIO[R, A]
  implicit def zioSync[R]: Sync[RIOPartiallyApplied] = ...

  // With kind-projector (concise):
  implicit def zioSync[R]: Sync[RIO[R, *]] = ...

  Why Did It Change?

  kind-projector Version History

  - 0.10.x and earlier: Used ? syntax
  - 0.11.0+: Introduced * syntax (kept ? for compatibility)
  - 0.13.0+: * is preferred to align with Scala 3's native type lambda syntax

@wisechengyi wisechengyi changed the title Bump scala from 2.12.15 to 2.12.20 Bump scala 2.12.15 -> 2.12.20, 2.13.6 -> 2.13.11 Nov 3, 2025
Copy link
Collaborator

@jonathanindig jonathanindig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@wisechengyi wisechengyi merged commit 9986ee9 into master Nov 3, 2025
3 checks passed
@wisechengyi wisechengyi deleted the scala21220 branch November 3, 2025 22:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

Morty Proxy This is a proxified and sanitized view of the page, visit original site.