According to the specification section 5:
Functions are defined using the FUNC keyword with explicit parameter and return types. The canonical positional-only form is FUNC R: name(T1: arg1, T2: arg2, ..., TN: argN){ block }, where each Tk and R is INT, FLT, STR, TNS, or FUNC. Parameters MAY also declare a call-time default value using Tk: arg = expr. A parameter without a default is positional; a parameter with a default is keyword-capable. Positional parameters MUST appear before any parameters with defaults. Defining a function binds name to a callable body with the specified typed formal parameters. Function names MUST NOT conflict with the names of built-in operators or functions.
However, according to the definition for the SIGNATURE operator in specification section 12:
SIGNATURE(SYMBOL: sym):STR ; returns a textual signature for the identifier sym. If sym denotes a user-defined function (FUNC) the result is formatted in the canonical form used in this specification, for example FUNC name(T1: arg1, T2: arg2 = default):R. For other bound symbols the result is TYPE: symbol (for example INT: x). The argument MUST be a plain identifier.
The SIGNATURE operator MUST handle FUNC according to the canonical form defined in specification section 5.
Update both the implementation and the specification.
According to the specification section 5:
However, according to the definition for the
SIGNATUREoperator in specification section 12:The
SIGNATUREoperator MUST handleFUNCaccording to the canonical form defined in specification section 5.Update both the implementation and the specification.