Stage 9.11: Failable Main Revisited
Rust code may have a plethora of representations of errors, but the standard library has a
universal trait std::error::Error for describing errors.
Using a smart pointer Box we can use the type
Box<dyn std::error::Error> as a common type for returning errors because it allows
us to propagate up an error on the heap and interact with it at a high level without having to know
a specific type.
Early in Rust Jungle we learned that the main function can return an error. We can now
return a type capable of describing almost any kind of error that might occur in our program so
long as the error's data structure implements Rust's common Error trait.
fn main() -> Result<(), Box<dyn std::error:Error>>
