E4036

E4036#

Cannot create values of the read-only type.

Erroneous Example#

In lib/lib.mbt, we declare a struct R with a private field __private:

pub(all) struct R {
  x : Int
  priv __private : Int
}

pub fn R::new(x: Int) -> R {
  {x, __private: 42}
}

In main/main.mbt, we try to create a value of type R:

let r : @lib.R = { x: 1, __private: 42 }

This gives the following error on line 1:

Cannot create values of struct type @lib.R because it contains private field(s).

Suggestion#

Construct the value using the public constructor:

let r : @lib.R = @lib.R::new(1)