E076: Value Classes May Not Wrap Another Value Class

This error is emitted when a value class (a class extending AnyVal) has a parameter whose type is another user-defined value class.

A value class may not wrap another user-defined value class because it would complicate the JVM representation and optimization of value classes.


Example

class Meters(val value: Double) extends AnyVal
class Distance(val meters: Meters) extends AnyVal

Error

-- [E076] Syntax Error: example.scala:2:6 --------------------------------------
2 |class Distance(val meters: Meters) extends AnyVal
  |      ^
  |      A value class may not wrap another user-defined value class

Solution

// Wrap the underlying primitive type directly
class Meters(val value: Double) extends AnyVal
class Distance(val value: Double) extends AnyVal

object Distance:
  def fromMeters(m: Meters): Distance = new Distance(m.value)
// Or use a regular class for the outer wrapper
class Meters(val value: Double) extends AnyVal
class Distance(val meters: Meters)