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';
}