E075: Value Classes May Not Be Contained

This error is emitted when a value class (a class extending AnyVal) is defined as a local class or as a member of another class.

Value classes must be top-level classes or members of an object. They cannot be local classes (defined inside a method) or member classes (defined inside another class) because they need to be fully resolved at compile time for optimization.


Example

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

Error

-- [E075] Syntax Error: example.scala:2:8 --------------------------------------
2 |  class Wrapper(val value: Int) extends AnyVal
  |        ^
  |        Value classes may not be a member of another class

Solution

// Define the value class at the top level
class Wrapper(val value: Int) extends AnyVal

class Outer:
  def wrap(x: Int): Wrapper = new Wrapper(x)
// Or define it inside an object
object Types:
  class Wrapper(val value: Int) extends AnyVal

class Outer:
  def wrap(x: Int): Types.Wrapper = new Types.Wrapper(x)