-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Labels
area:typeritype:bugregressionThis worked in a previous version but doesn't anymoreThis worked in a previous version but doesn't anymore
Description
Based on the OpenCB failure in kasiamarek/tyre-scala
- build logs
Compiler version
Last good release: 3.8.0-RC1-bin-20250915-afbb66b-NIGHTLY
First bad release: 3.8.0-RC1-bin-20250916-eb1bb73-NIGHTLY
Bisect points to b1067d9 / #23923
Minimized code
class TyreCompiler[IN <: Tuple, R](val context: Context[R *: IN]):
import context.*
private class Loop[IS <: Tuple, T](
val context: Context[T *: IS],
innerAutomaton: context.Automaton[IS]
) {
lazy val fixableStates: List[RefinedInitNonAcceptingState[T, IS]] =
innerAutomaton.initStates.map { case is: context.InitNonAcceptingState[?] =>
new RefinedInitNonAcceptingState[T, IS] {
type Tail = is.OS
type OS = List[T] *: Tail
lazy val state = new NonAcceptingState:
val next: List[Transition[OS]] =
is.state.next.flatMap(fixTransition[is.OS](fixableStates, _))
}
}
private def fixTransition[S <: Tuple](
initStates: List[RefinedInitNonAcceptingState[T, IS]],
transition: context.Transition[S]
): List[Transition[List[T] *: S]] = ???
private trait RefinedInitNonAcceptingState[T, IS <: Tuple] extends InitNonAcceptingState[IS]:
type Tail <: Tuple
type OS = List[T] *: Tail
lazy val state: NonAcceptingState[OS]
}
private class Context[R <: Tuple]:
sealed trait State[S <: Tuple]:
val next: List[Transition[S]]
trait NonAcceptingState[S <: Tuple] extends State[S]
sealed trait Transition[IS <: Tuple]:
def state: State[?]
sealed trait InitState[-IS <: Tuple]:
type OS <: Tuple
def state: State[?]
trait InitNonAcceptingState[-IS <: Tuple] extends InitState[IS]:
lazy val state: NonAcceptingState[OS]
trait Automaton[-IS <: Tuple]:
val initStates: List[InitState[IS]]
Output
-- [E007] Type Mismatch Error: /Users/wmazur/projects/scala/community-build3/test.scala:16:74 -----------------------------------------------------------------------------------------------
16 | is.state.next.flatMap(fixTransition[is.OS](fixableStates, _))
| ^
| Found: (_$1 : Context.this.Transition[? >: Context.this.State[?]#S | is.OS <: Context.this.State[?]#S & is.OS])
| Required: Loop.this.context.Transition[is.OS]
|
| longer explanation available when compiling with `-explain`
Expectation
Should compile
Metadata
Metadata
Assignees
Labels
area:typeritype:bugregressionThis worked in a previous version but doesn't anymoreThis worked in a previous version but doesn't anymore