In Rust, the Option and Result types are really common. Here are a few idioms I've discovered for working with them using combinators which can simplify code:
// Our program needs a string for something (e.g. filename, database table name, etc).
// To start, we can get this as an optional string - here a CLI argument, but it could be anything; e.g.
// a value parsed from JSON, etc. The `.nth(1)` call here gives us an `Option<String>`.
// We want to compute a fallback value, but doing so can fail (e.g. return `Result<String>`).