何らかの理由でHaskellのライブラリ設計者がUndecidableInstances
を使用することを決めたとします。ライブラリは正常にコンパイルされます。今、いくつかのプログラムがライブラリを使用している(そのような型クラスのいくつかのインスタンスを定義しているような)が、拡張を使用していないとします。コンパイルが失敗する(終了しない)ことはありますか?UndecidableInstancesプラグマをローカルで使用すると、コンパイル終了時にグローバルな影響がありますか?
このようなシナリオが発生する可能性がある場合は、例をご覧ください。たとえば、mtlは多くの場合、UndecidableInstances
を使用しています。mtl(またはその拡張子を使用する他の標準ライブラリ)に依存するプログラムを書くことは可能ですか?UndecidableInstances
は使用しませんが、
私はあなたのソリューションで遊んでいましたが、私はそれを 'class C a f :: a - > a'と'インスタンスC [[a]] => C [a] f = id'これは他の拡張子を必要とせず、 'UndecidableInstances'です。 –
'mtl'を調べた後、コンパイラがそれを使ってループすることはできません。拡張が必要な唯一の理由は、そのインスタンスの一部が[カバレッジ条件](http://www.haskell.org/ghc/docs/7.0.1/html/users_guide/type-class-extensions.html#インスタンスルール)。しかし、条件の背後にある考え方は満足しています。すべてのrhs型変数は、 'mtl'のインスタンス宣言から推論できます。 –
ええと、私は 'C [[a]]'は 'FlexibleContexts'を必要としないことに驚いています。 –