structVec{x:bin64,y:bin64}# a glyph operator: any run of not % & * plus minus / < > = ? @ ^ | ~op<+>['a':Vec,'b':Vec]->Vec{returnVec[x='a'.xplus'b'.x,y='a'.yplus'b'.y];}# a word operator, like times / pow / mod.flooropdot['a':Vec,'b':Vec]->bin64{return'a'.xtimes'b'.xplus'a'.ytimes'b'.y;}# operands are lent unless the op says give; then the caller says give tooop<*>[give'a':Vec,'b':bin64]->Vec{change'a'.x='a'.xtimes'b';change'a'.y='a'.ytimes'b';returngive'a';}MAIN{let'u':=Vec[x=1,y=2];let'v':=Vec[x=3,y=4];let'w':='u'<+>'v';# 'u' and 'v' both still herestd::print.useful['w'.x," ",'w'.y,newln];std::print.useful['u'dot'v',newln];let'd':=('u'<+>'v')dot'v';# custom operators have no precedence: parenthesisestd::print.useful['d',newln];let's':=give'u'<*>10;# 'u' is gone after thisstd::print.useful['s'.x," ",'s'.y,newln];}