A function return specification consists of an optional type
and an optional expected postcondition. The special identifier
result can be used in the postcondition to denote
the returned value. If the postcondition is omitted it is
quivalent to true, otherwise the postcondition
is check after every application.
If the return type is not specified, the compiler will try to calculate it from the function definition. Occasionally this will fail for recursive functions due to the interaction with overloading and recursive types. Reusable library functions should always provide an explicit return type annotation.