最近のいくつかの質問から離れて、私は古いボギーマンにスポットライトを当てることにしましたOverlappingInstances
.
数年前、私は真剣にこの質問をしていたかもしれません: 結局のところ、あなたは便利なデフォルト インスタンスを提供でき、他の人は必要に応じてより具体的なインスタンスでオーバーライドすることができます。
途中で、私は、OverlappingInstances
実際にはそれほどきれいではなく、避けるのが最善である視点に対していくらかの感謝を吸収しました。主に、他の大きな拡張機能とは異なり、理論的に十分な根拠がないという事実に起因しています。
でも考えてみると、何が本当に悪いのか、他の人に聞かれたら説明できるかどうかわかりません。
私が探しているのは、OverlappingInstances
それが型システムや他の不変条件を破壊することによるものであろうと、単に一般的な予期せぬことや乱雑であろうと、使用が悪いことを引き起こす可能性がある方法の具体的な例です。
私が知っている特定の問題の1つは、単一のモジュールインポートを追加または削除するだけではプログラムの意味を変更できないというプロパティが壊れることです。拡張機能をオンにすると、新しいインスタンスの重複が静かに追加または削除される可能性があるためです。なぜそれが不愉快なのかはわかりますが、なぜそれが驚くほどひどいのかわかりません.
おまけの質問: 有用ではあるが、理論的に根拠のない、悪い出来事につながる可能性のある拡張機能について話している限り、どうしてGeneralizedNewtypeDeriving
同じ悪い評判がつかないのでしょうか? 否定的な可能性がよりローカライズしやすいからでしょうか。何が問題を引き起こすのかを見て、「それをしないでください」と言う方が簡単だと思いますか?
(注:答えの矢面に焦点を当てた方がいいと思います。説明が少なくて済むのではありOverlappingInstances
ません。)IncoherentInstances
編集:ここにも同様の質問に対する適切な回答があります。