//@ The function `and_then` takes a closure from `T` to `Result<U, E>`, and uses it to transform a `Result<T, E>` to a
//@ `Result<U, E>`. This way, we can chain computations that only happen if the previous one succeeded (and the error
//@ type has to stay the same). In case you know about monads, this style of programming will be familiar to you.
//@ The function `and_then` takes a closure from `T` to `Result<U, E>`, and uses it to transform a `Result<T, E>` to a
//@ `Result<U, E>`. This way, we can chain computations that only happen if the previous one succeeded (and the error
//@ type has to stay the same). In case you know about monads, this style of programming will be familiar to you.