public pub2;

proc main()
{
    // Create a couple of new publics
    var pub0 = new Public("pub0");
    var pub1 = new Public("pub1");
    // Create a new class using those, plus an existing public
    var cls = new Class("cls", {pub0, 123, pub1, "hello", pub2, 3.14});
    "New class:\n";
    forall (cls.(pub)) {
        "", pub, ": ", cls.(pub), '\n';
    }
    "\n";

    // Note that classes created with "new Class" are *not* readonly
    cls.(pub0) = 456;

    // Create an instance of that class
    var obj = new cls();
    "New instance:\n";
    forall (obj.(pub)) {
        "", pub, ": ", obj.(pub), '\n';
    }
}