Functions
The fn keyword is used to define new functions.
Similar to blocks, each expression in the function body is evaluated in order
and the value of the last expression is returned from the function. Gleam is
an expression based language so there is no return operator, but
there are ways to conditionally return early from a function, which will be
introduced in a later section.
The double and multiply functions are defined
without the pub keyword. This makes them private
functions, they can only be used within this module. If another module
attempted to use them it would result in a compiler error.
Like with assignments, type annotations are optional for function arguments and return values. It is considered good practice to use type annotations for functions, for clarity and to encourage intentional and thoughtful design.