この節を読んでも問題が解決しない場合、あなたはバグを発見した可能性がある。どうか報告してほしい。1.3. GHCのバグを報告するには、どのようにバグを報告するか、と、バグについて我々が知りたいと思うことの一覧がある。疑わしいなら、報告してほしい。我々は激怒した利用者からのメールを愛している:-!
(14.1. Haskell 標準とGlasgow Haskell、言語上の不準拠点 には、Haskellの言語定義と比較してのGlasgow Haskellの欠点が載っている。これも読みたいと思うかもしれない。)
これらが起きたときは常にGHCシステムのバグである。報告してほしい。
より良いエラーメッセージを出力できたと思うなら、バグとして報告してほしい。
例えば、“…warning: `Foo' declared `static' but never defined.”のようなもの。見苦しいが、問題はないはずである。
.hi
インタフェースファイルに関する鋭敏性
GHCはインタフェースファイルについてとても敏感である。例えば、非標準のPrelude.hi
を掴まされると、実に酷いことが起こるだろう。-XNoImplicitPrelude
を、自分で何をしているか分からずに有効にすると、コンパイラはほとんど間違いなく死ぬ。
さらに、下にあるように、不安定なインタフェースを使ってコンパイルされたプログラムは、走らせる時に大いに困難を招く。
本当に? :-) -dcore-lint
という「偏執的になれ」オプションが便利である。これによって、CoreからCoreへの変換毎に「lint」過程が誤り(とくに型エラー)を検査する。我々は常に-dcore-lint
付きで実行している。これには大体コンパイル時間の5%ほど掛かる。
リンカが_<なにか>_fast
が見付からないと文句をいうなら、なにかが整合していない。おそらく、モジュールを正しい依存性順にコンパイルしなかったのだろう。
これに関しては、GHCはかなり良くやる。特に、一行か二行のずれを見逃してくれるなら。インスタンス宣言やクラス宣言の場合は、行番号は宣言を示すのであって、特定のメソッドではない。
行番号の誤りで特に困ることがあれば、報告してほしい。