The return type can be any atomic or composite type, as described in the Types section above. For example, the following are valid function declarations:
int foo();
(int, int) foo'();
[int, int] foo''();
(int -> int) foo'''();
() foo''''();
Note that from a low-level perspective, value (2, (3, 9)) of type (int, (int, int)) and value (2, 3, 9) of type** (int, int, int)**, are represented in the same way as three stack entries 2, 3 and 9.