はい、私はそれUndecidableInstances
が悪いことを知っています。モジュールを必要としないようにモジュールを設計するのに本当に苦労しましたが、次のようなものがあります。
instance Foo x (C x y) => Bar (C x y) where
...
それを変更すると、API が大幅に醜くなります。私は決して派生Foo
しBar
ないので、ループを作る方法はありません。
一方、有効にUndecidableInstances
すると、ばかげた間違いを見落としやすくなります。たとえば、次のように誤って書くことができます。
instance Foo x (C x z) => Bar (C x y) where
...
z
右側には決して表示されません。
質問:モジュール内でローカルに使用することは可能UndecidableInstances
ですか? つまり、通常の終了規則が解除される場所を明示的にマークしますか?
もちろん、終了には役立ちませんが、この拡張機能を使用する決定をより多くの情報に基づいて行うことができます。
質問 2:UndecidableInstances
終了を保証しないが、2 番目のコード スニペットのようないくつかの境界線のケースを禁止するよりも弱いものはありますか?