Skip to content

Lazy enums. #5034

Closed
Closed
@sir-wabbit

Description

@sir-wabbit

It would be great if there were lazy enums 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

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