The in T type optimises type T for passing as an input parameter.
The out T type optimises type T for passing as an output parameter.
The inout T type (or io T optimises type T for passing as an input/output parameter.
This relies on binding binding rules, and selecting passing by copy or by reference depending on what is more efficient.