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)
In this article