Skip to content

Typer regression in 3.2.0 #15940

Closed
Closed
@WojciechMazur

Description

@WojciechMazur

Compiler version

Fails in 3.2.0
Fails in 3.2.1-RC1-bin-20220830-8504b8d-NIGHTLY
Compiles with 3.1.3

Minimized code

object Ops:
  implicit class EitherSeqOps[E, T](private val seq: Seq[Either[E, T]]) extends AnyVal:
    def sequence: Either[::[E], Seq[T]] = ???

trait BuildException
case class CompositeBuildException(ex: ::[BuildException]) extends BuildException

trait ActionableDiagnostic
trait ActionableHandler[A <: ActionableDiagnostic]:
  def exec: Either[BuildException, Seq[A]]

import Ops._

val test: Either[BuildException, Seq[ActionableDiagnostic]] =
  // Can be replaced with Seq[Either[BuildException, Seq[ _ <: ActionableDiagnostic]]] , but current version matches better type of missing implicit
  Seq.empty[ActionableHandler[_]].map(_.exec)
    .sequence
    .left.map(_.head)
    .map(_.flatten) // error

Dirty workaround:

   Seq.empty[ActionableHandler[_]].map(_.exec)
    .sequence
    .left.map(_.head)
    .map{ (v: Seq[Seq[Any]]) => v.flatten }
    .asInstanceOf[Either[BuildException, Seq[ActionableDiagnostic]]]

would also work for Seq.empty[ActionableHandler[_ <: ActionableDiagnostic]].map(_.exec)

Output

[error] ./test.scala:21:19: 
[error] No given instance of type Seq[Any] => IterableOnce[B] was found for parameter asIterable of method flatten in trait IterableOps
[error] where:    B is a type variable with constraint <: ActionableDiagnostic
[error]     .map(_.flatten) // error
[error]      

Expectation

Should compile

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions