Skip to content

Cannot create impure partial functions with scala2-library-cc #23225

@natsukagami

Description

@natsukagami

Compiler version

Latest main

Minimized code

//> using scala 3.7.2-RC1-bin-SNAPSHOT //> using dep org.scala-lang::scala2-library-cc-tasty-experimental::3.7.2-RC1-bin-SNAPSHOT import language.experimental.captureChecking import scala.caps.Capability class A def run(f: PartialFunction[A, A]^): A = f(A()) class File extends Capability: def read() = () def main() = val file = File() run: case a => file.read() a

Output

[error] ./partial-function.scala:17:5 [error] illegal inheritance: self type [error] scala.runtime.AbstractPartialFunction[Option[partialfunctions.A], [error] partialfunctions.A] [error] with Serializable {...}^{file} of anonymous class [error] [error] scala.runtime.AbstractPartialFunction[Option[partialfunctions.A], [error] partialfunctions.A] [error] with [error] Serializable {...} does not conform to self type scala.runtime.AbstractPartialFunction[Option[partialfunctions.A], [error] partialfunctions.A] [error] of parent class AbstractPartialFunction

This is due to AbstractPartialFunction being declared with a self =>, which assumes a pure self type:

abstract class AbstractPartialFunction[@specialized(Specializable.Arg) -T1, @specialized(Specializable.Return) +R] extends Function1[T1, R] with PartialFunction[T1, R] { self => // ... }

Since AbstractPartialFunction is specialized, not sure if we can override this in scala2-library-cc Tasty.

Expectation

Should compile.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions