When the body of a declaration spans multiple lines, start the body on a new line
after the = symbol, and indent the entire body.
def f(x,y) = declaration declaration body expression
Apply this style recursively; if a def appears within a def, indent its contents even further.
def f(x,y) = declaration def helper(z) = declaration in helper declaration in helper body of helper declaration body expression
The following situation could introduce syntactic ambiguity: the end of a declaration (def or val) is followed by an expression that starts with a non-alphanumeric symbol. Consider these example programs:
def f() = def g() = h (x,y)
def f() = val t = h (x,y)
def f() = val t = u -3
(x,y) may be interpreted as the parameter list of h, and -3 as
continuation of u, or they may be regarded as completely
separate expressions (in this case, the goal expression of def f). To avoid this ambiguity,
Orc imposes the following syntactic constraint:
An expression that follows a declaration begins with an alphanumeric symbol
To circumvent this restriction, if (x,y) is an expression that follows a declaration,
write it as # (x,y). Similarly, write # -3, in case -3 is
the goal expression in the above example. Note that there are many solutions to this problem; for example
using signal >> (x,y) or stop | (x,y) is also valid.