haskell-jp / beginners #21 at 2022-07-17 21:55:08 +0900

多段に構える、LamdaCase、maybe関数を使う、3つのパターンと回答ありがとうございます。

LamdaCaseだと警告が出てくれるんですね。
maybeは慣れるまでなかなかぱっと出てこなさそうです。

pt1のように書いてしまった場合、GHCオプションで警告やエラーにするオプションはありますでしょうか?
pt1のようにdo記法の <- でパターンマッチが失敗しうる場合に警告を出すオプションは今のGHCにはなさそうです。`<-` のパターンマッチ失敗はcatchを使わなくても処理できることが多いこと、 Maybe やリストなどのモナドでは <- で意図的に失敗しうるパターンマッチを使うことがあり、警告の優先度が低いと思われたのかもしれません。一応issueは立ってます: どうしてもどうにかしたければ、IOモナド(等)のMonadFailを実装しないラッパーを用意するといういう手があります。

警告をエラーにするには -Werror オプションが利用できます。`-Werror=incomplete-patterns -Werror=incomplete-uni-patterns` という風に利用できます。

「main関数をcatchで包んで全てのエラーを捕捉する」のは状況にもよりますが、あまりお勧めしません。下手なエラーの握りつぶし方をすると発生箇所等の情報が得られなくなってデバッグが困難になる恐れがあります。
オプションはないものなんですね。
例外が起きる箇所を意識できていないので全部エラーか警告にと思ったのですが。

回答ありがとうございます。