class num {
    var val;
    public proc create(v) {val = v;}

    operator <(rhs) {return val < rhs;}
    operator \<(lhs) {return lhs < val;}
    operator >(rhs) {return val > rhs;}
    operator \>(lhs) {return lhs < val;}
}

proc main()
{
    var a = [3,3].iterate();
    var b = 3->iterate();
    var c = #{#{0,1,2},#{3,4,5},#{6,7,8}};
    var d = <<<"one",1,"two",2>>>;
    var e = new num(3);
    var f = new num(2);
    var g = {{1,2},{3,4}}; // List of lists
    var h = {{1.,2s},{3ub,4}}; // List of lists

    "", a.arrcmp(b), '\n';
    "", a.arrcmp(c), '\n';
    try { a.arrcmp(d); } catch (err) { "", err, '\n'; }
    "", e.arrcmp(f), '\n';
    "", e.arrcmp(4), '\n';
    "", g.arrcmp(h), '\n';
    h[1][1] = 5us;
    "", g.arrcmp(h), '\n';
}