私はちょうどハスケルの初期型クラスシステムのいくつかの問題点とその改善方法について、this paper(「タイプクラス:Peyton Jones &ジョーンズのデザインクラスの探索」を読んだところです。なぜコンテキストリダクションが必要ですか?
発生する問題の多くは、コンテキスト縮小に関連しています。これは、「逆の関係」の関係に従ってインスタンスと関数の宣言に対する制約のセットを減らす方法です。
コンテキスト内でinstance (Ord a, Ord b) => Ord (a, b) ...
のどこかにある場合は、が{Ord a, Ord b}
に縮小されます(縮小では必ずしも制約の数が縮小されるわけではありません)。
この縮小がなぜ必要なのかを私は論文から理解しませんでした。
これは、タイプチェックのいくつかの形式を実行するために使用されました。削減された制約のセットがある場合、それらを満たすことができるインスタンスが存在するかどうかをチェックできます。それ以外の場合はエラーです。私はあなたが使用サイトで問題に気づくだろうから、それの付加価値が何であるかはあまり確信していませんが、大丈夫です。
あなたがそのチェックをしなければならない場合でも、推論型の中でなぜ縮小結果を使うのですか?この論文は、直感的ではない推論型につながると指摘する。
この論文はかなり古く(1997年)、私が知る限り、文脈の縮小は依然として懸念されています。 Haskell 2010の仕様では、私が上で説明した推論の動作(link)について言及しています。
だから、なぜこのようにするのですか?
実際、修正済みです! – Norswap