Skip to content

Possible typer regression in Scala 3.1.2+ #14804

Closed as not planned
Closed as not planned
@WojciechMazur

Description

@WojciechMazur

Compiler version

The bug is present in builds since 3.1.2-RC1 and present in current nightly build 3.2.0-RC1-bin-20220308-29073f1-NIGHTLY,

Minimized code

The following code was minimalized from https://github.com/tpolecat/doobie, it compiles with Scala 3.1.1
https://github.dev/tpolecat/doobie/blob/0ead51d4628929db46b29c446eeeef7b68ddaf30/modules/core/src/main/scala/doobie/util/write.scala#L49-L56

sealed abstract class Nullability  extends Product with Serializable
object Nullability {
  sealed abstract class NullabilityKnown extends Nullability
  case object NoNulls         extends NullabilityKnown
  case object Nullable        extends NullabilityKnown
}
import Nullability.*

abstract class Put[A]
sealed trait Elem
object Elem {
   final case class Arg[A](a: A, p: Put[A]) extends Elem
   final case class Opt[A](a: Option[A], p: Put[A]) extends Elem
 }

class Write[A]{
  def toList(a: A): List[Any] = ???
  def puts: List[(Put[_], NullabilityKnown)] = ???
  
  def toFragment(a: A) = {
    (puts zip toList(a)).map {
        case ((p: Put[a], NoNulls), a) => Elem.Arg(a.asInstanceOf[a], p)
        case ((p: Put[a], Nullable), a) => Elem.Opt(a.asInstanceOf[Option[a]], p)
    }
  }
}

Output

[error] ./test.scala:23:71: Found:    (p : Put[a])
[error] Required: Put[Any]
[error]         case ((p: Put[a], NoNulls), a) => Elem.Arg(a.asInstanceOf[a], p)
[error]                                                                       ^
[error] ./test.scala:24:80: Found:    (p : Put[a])
[error] Required: Put[Any]
[error]         case ((p: Put[a], Nullable), a) => Elem.Opt(a.asInstanceOf[Option[a]], p)```
[error]                                                                                ^

## Expectation
The snippet compiles with Scala up to 3.1.1

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