E071: Value Classes May Not Define Non Parameter Field

This error is emitted when a value class (a class extending AnyVal) defines a val or var field that is not the primary constructor parameter.

Value classes can only have the single val parameter from their primary constructor. Additional fields would require object allocation, defeating the purpose of value classes.


Example

class Wrapper(val value: Int) extends AnyVal:
  val doubled = value * 2

Error

-- [E071] Syntax Error: example.scala:2:6 --------------------------------------
2 |  val doubled = value * 2
  |  ^^^^^^^^^^^^^^^^^^^^^^^
  |  Value classes may not define non-parameter field

Solution

// Use a def instead of val
class Wrapper(val value: Int) extends AnyVal:
  def doubled: Int = value * 2
// Or use a regular class if you need fields
class Wrapper(val value: Int):
  val doubled = value * 2