The only nitpick I'd have is that `impl Trait` doesn't necessarily
imply a concrete type. Or rather it does, but in so far `Box<dyn Trait>` is also a concrete type :)
That means that you can have a function that returns `-> impl Trait` with a concrete implementation because it has a single return value, but if you add a second and don't want to create an enum for a simple version of static dispatch, you can change the returned values to be trait objects and the callers don't break.