do内のletがパターンマッチに失敗した例外をキャッチする方法?(2)

Gusさん、コメントありがとうございます。

まだあまり整理がついていないのだけど、コメントを見る限りでは、let式のパターンマッチが遅延しているために、tryの外に出てから例外が投げられてしまうためにキャッチできていないように見える。前者の例はdo式の書き換え規則から分かるとおり、クロージャとcase相当のパターンマッチに書き換えられるので遅延しない、と。

純関数的なところで例外なんて投げるもんじゃないですね。