//@ In general, this is called a *closure*. Closures take some arguments and produce a result, and they have an *environment*
//@ they can use, which corresponds to the type `PrintWithString` (or any other type implementing `Action`). Again we have the
//@ choice of passing this environment in owned or borrowed form, so there are three traits for closures in Rust: `Fn`-closures
//@ In general, this is called a *closure*. Closures take some arguments and produce a result, and they have an *environment*
//@ they can use, which corresponds to the type `PrintWithString` (or any other type implementing `Action`). Again we have the
//@ choice of passing this environment in owned or borrowed form, so there are three traits for closures in Rust: `Fn`-closures