E070: Value Classes May Not Define Inner Class

This error is emitted when a value class (a class extending AnyVal) contains an inner class definition.

Value classes have strict limitations to ensure they can be optimized by the compiler. They may not define inner classes, traits, or objects because the runtime representation of a value class is its wrapped value, not a full object.


Example

class Wrapper(val value: Int) extends AnyVal:
  class Inner

Error

-- [E070] Syntax Error: example.scala:2:8 --------------------------------------
2 |  class Inner
  |  ^^^^^^^^^^^
  |  Value classes may not define an inner class

Solution

// Move the inner class outside the value class
class Inner

class Wrapper(val value: Int) extends AnyVal:
  def process: Int = value * 2
// Or use a regular class if you need inner classes
class Wrapper(val value: Int):
  class Inner