In all programming languages, we need to deal with operations than can “fail”: a pure function might fail to produce a result, or an impure function might fail to produce its desired side-effect (create a new file, or whatever). In neither case can we just blindly continue with the rest of the computation. In the ...