-// Phew. We wrote our first Rust function! But all this `NumberOrNothing::` is getting kind of
-// ugly. Can't we do that nicer? Indeed, we can: The following line tells Rust to take
-// the constructors of `NumberOrNothing` into the local namespace:
-use self::NumberOrNothing::{Number,Nothing};
-// Try moving that above the function, and removing all the occurrences `NumberOrNothing::`.
-// Things should still compile, now being much less verbose!
-
-// However, the code is still not "idiomatic Rust code". To understand why, it is important to
-// understand that Rust is an "expression-based" language. This means that most of the
-// terms you write down are not just *statements* (executing code), but *expressions*
-// (returning a value). This applies even to the body of entire functions!
-
-// For example, consider `sqr`. Between the curly braces, we are giving the *expression*
-// that computes the return value. So we can just write `i * i`, the expression that
-// returns the square if `i`, and make that our return value! Note that this is
-// very close to how mathematicians write down functions (but with more types).
-fn sqr(i: i32) -> i32 { i * i }
-
-// Conditionals are also just expressions. You can compare this to the ternary `? :` operator
-// from languages like C.
-fn abs(i: i32) -> i32 { if i >= 0 { i } else { -i } }
-
-// And the same applies to case distinction with `match`: Every `arm` of the match
-// gives the expression that is returned in the respective case.
-fn number_or_default(n: NumberOrNothing, default: i32) -> i32 {
- match n {
- Nothing => default,
- Number(n) => n,