Destroy All Ifs – A Perspective from Functional Programming
The idea that each type has its own control flow primitives is bothersome. It's taken over Rust:<p><pre><code>    argv.nth(1)
        .ok_or("Please give at least one argument".to_owned())
        .and_then(|arg| arg.parse::<i32>().map_err(|err| err.to_string()))
        .map(|n| 2 * n)
</code></pre>
I'm waiting for<p><pre><code>    date.if_weekday(|arg| ...)
</code></pre>
Reading this kind of thing is hard.  All those subexpressions are nameless, and usually comment-less.  This isn't pure functional programming, either; those expressions can have side effects.