Skip to content

Incorrect rewrite for composed method results in non compiling code #24103

@WojciechMazur

Description

@WojciechMazur

Based on the OpenCB failure in sagifogel/proptics coused by wrong semi-automatic migration using -rewrite -source:3.x-migration - buid logs

Compiler version

All Scala 3.4+ version

Minimized code

//> using options -source:3.4-migration -rewrite

abstract class IndexedTraversal_[I, S, T, A, B]:
  final def overF[F[_]](f: ((A, I)) => F[B])(s: S): F[T] = ???

type Id[A] = A

trait IndexedTraversalLaws[I, S, A] {
  def indexedTraversal: IndexedTraversal_[I, S, S, A, A]

  def consistentFoci(s: S, f: (A, I) => A, g: (A, I) => A) =
    (indexedTraversal.overF[Id](f.tupled) _ compose indexedTraversal.overF[Id](g.tupled))(s)
    ???
}

Rewritte patch:

@@ -9,6 +9,6 @@ trait IndexedTraversalLaws[I, S, A] {
   def indexedTraversal: IndexedTraversal_[I, S, S, A, A]
 
   def consistentFoci(s: S, f: (A, I) => A, g: (A, I) => A) =
-    (indexedTraversal.overF[Id](f.tupled) _ compose indexedTraversal.overF[Id](g.tupled))(s)
+    ((() => indexedTraversal.overF[Id](f.tupled)) compose indexedTraversal.overF[Id](g.tupled))(s)
     ???
 }

Output on next compilation

Compiling project (Scala 3.7.3, JVM (21))
[error] ./test2.scala:12:6
[error] value compose is not a member of () => S => Id[S]
[error]     ((() => indexedTraversal.overF[Id](f.tupled)) compose indexedTraversal.overF[Id](g.tupled))(s)
[error]      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Expectation

Rewrite should produce a code that compiles

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions