// Print a newline
fn putln() -> void = do
putchar('\n')
end in
// Print a number, and a newline
fn putnumln(n: int) -> void = do
putnum(n); putln()
end in
// Print a cartesian coordinate
fn putpoint(p: (int, int)) -> void = do
let x = p.0,
y = p.1
in do
putchar('(');
putnum(x);
putchar(',');
putchar(' ');
putnum(y);
putchar(')');
end
end in
// Print a cartesian coordinate and a newline
fn putpointln(p: (int, int)) -> void = do
putpoint(p); putln()
end in
// Move a point with a change in X and a change in Y
fn move(p: (int, int), dx: int, dy: int) -> (int, int) =
(p.0 + dx, p.1 + dy)
in
fn inc(n: &int) -> &int = do *n += 1; n end in
fn square(n: &int) -> &int = do *n *= *n; n end in
let n = 255,
tup = alloc(1, (int, int))
in do
*tup = (5, 6);
tup->move(1, 2).putpointln;
&n.inc.square->putnumln;
end