ghcのwarningについて
Haskell Advent Calendarに拙文を書いたことで、いけがみさん, やまもとさんなどから教えてもらったので、ghcのwarningについて調べてみました。
まず、warningの一覧はghcのドキュメントの中にあって、和訳も整備されています。フラグ早見表というのもあります。
次に、ホームに.ghciファイルを書いておくとghciの起動時にコマンドを実行できるということを知りました。.ghciの使い方も和訳されてます。じゃあghcにもデフォルトでフラグ渡したりできないのかな、と思いましたが、.ghcファイルというのは無いようなので、これはまあMakefileなり何なりから渡してください、ということなのでしょう。
さて、warning一覧に書いてあるwarningを出したり消したりしてみて遊んでいたのですが、-fwarn-incomplete-record-updates のところで詰ってしまいました。これは以下のように、存在しないかもしれないレコードを更新しようとするかもしれないコードに対して警告を発するというものです。
data Foo = Foo { x :: Int } | Bar f :: Foo -> Foo f foo = foo { x = 6 }
"このオプションはとてもうるさいことがあり、プログラムのバグを示していないことがしばしばあるので、デフォルトでは有効にされていない。"とされ、-Wallでも有効にされないので、気にしなくてもいいのかもしれませんが、それでもWarningである以上、消すことができるはずですよね。それでまあ
data Foo = Foo {record::Int} | Bar deriving (Show) main::IO () main = do print y where x = Foo 40 y = f x f :: Foo -> Foo f foo = case foo of Foo _ -> foo{record=6} Bar -> foo
こうかな、などとやって見ましたが、消えませんでしたね・・・こうなってくるととても気になります。どなたか、上のプログラムを ghc --make -Wall -Werror -fwarn-incomplete-record-updates でもコンパイルできるようにする方法、わかりますか?まあ、気にしなくてもいいのかもしれませんが、それでもWarningである以上、消すことができるはずですよね・・・。なんだか偏執狂的になってきたので、正気度チェックをしたほうがいいかもしれませんね。