Closed
Description
It would be great if there were lazy enum
s with the following encoding:
// Or maybe just by-name parameters?
lazy enum LazyList[+A] {
case :: (head: => A, tail: LazyList[A])
case Nil
}
// >>>
sealed trait LazyList[+A]
object LazyList {
final class :: [A](_head: => A, _tail: => LazyList[A]) extends LazyList[A] {
lazy val head: A = _head
lazy val tail: LazyList[A] = _tail
}
final case object Nil extends LazyList[+A]
// plus *lazy* unapply that doesn't immediately evaluate head or tail
}
But in the meantime, here is a crash:
lazy enum i0
Exception in thread "main" java.lang.AssertionError: assertion failed: illegal flagset combination: lazy abstract <enum> and sealed
at dotty.DottyPredef$.assertFail(DottyPredef.scala:38)
at dotty.tools.dotc.core.Flags$FlagSet$.$bar$extension(Flags.scala:26)
at dotty.tools.dotc.ast.DesugarEnums$.addEnumFlags(DesugarEnums.scala:74)
at dotty.tools.dotc.ast.desugar$.classDef(Desugar.scala:629)
at dotty.tools.dotc.ast.desugar$.defTree(Desugar.scala:773)
at dotty.tools.dotc.typer.Namer.expand(Namer.scala:419)
at dotty.tools.dotc.typer.Namer.index$$anonfun$1(Namer.scala:683)
at scala.compat.java8.JProcedure1.apply(JProcedure1.java:18)
at scala.compat.java8.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:389)
at dotty.tools.dotc.typer.Namer.index(Namer.scala:683)
at dotty.tools.dotc.typer.Namer.recur$1(Namer.scala:462)
at dotty.tools.dotc.typer.Namer.indexExpanded(Namer.scala:479)
at dotty.tools.dotc.typer.Namer.index(Namer.scala:452)
at dotty.tools.dotc.typer.FrontEnd.enterSyms$$anonfun$1(FrontEnd.scala:54)
at scala.compat.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at dotty.tools.dotc.typer.FrontEnd.monitor(FrontEnd.scala:34)
at dotty.tools.dotc.typer.FrontEnd.enterSyms(FrontEnd.scala:56)
AE-2251401fe4c14de0510247ea75752a42fcfb237a