class foo {
    public var x, y;
}

foo bar {x = 3}

namespace ack {
    foo bar {x = [[1,2],[3,4]]}
}

proc main()
{
    io::putvar("Hello!\n");
    io::putvar(L"Hello!\xABCD");
    io::putvar(["123","456"]);
    io::putvar('A');
    io::putvar(L'\x01');
    io::putvar(true);
    io::putvar(1, 2b, 3ub, 4s, 5us, 6u, 7l, 8ul, 9.h, 10., 11.d);
    io::putvar([[1,2],[3,4]]);
    io::putvar(#{#{'1','2'},#{'3','4'}});
    io::putvar(<<<"one",1,"II",2,"pi",3.14,"four",[[1,2],[3,4]]>>>);
    io::putvar(bar, ack::bar);
    var x = new foo();
    x.x = public::x;
    x.y = foo;
    io::putvar(x);
    var y = new foo();
    y.x = ack::bar;
    y.y = x;
    io::putvar(y);
    // Test recursion
    y.y = y;
    try {
        io::putvar(y);
    }
    catch (e) {
        "Caught ", e, '\n';
    }
}