6.9.3 User-defined operators

The following symbols may be used with operator to define or redefine operators on structures and built-in types:

- + * / % ^ ! < > == != <= >= & | ^^ .. :: -- --- ++
<< >> $ $$ @ @@ <>

The operators on the second line have precedence one higher than the boolean operators <, >, <=, and >=.

Guide operators like .. may be overloaded, say, to write a user function that produces a new guide from a given guide:

guide dots(... guide[] g)=operator ..;

guide operator ..(... guide[] g) {
  guide G;
  if(g.length > 0) {
    write(g[0]);
    G=g[0];
  }
  for(int i=1; i < g.length; ++i) {
    write(g[i]);
    write();
    G=dots(G,g[i]);
  }
  return G;
}

guide g=(0,0){up}..{SW}(100,100){NE}..{curl 3}(50,50)..(10,10);
write("g=",g);