最近のいくつかの質問を元に戻して、私は古いボギーマンの灯台に、OverlappingInstances
を向けたいと思った。OverlappingInstancesについて何が悪いですか?
数年前、私は本質的にこの質問をしていたかもしれません:結局のところ、あなたは有用なデフォルトのインスタンスを提供することができます。
途中で私は、OverlappingInstances
が本当にとてもきれいでなく、避けられないという視点に感謝しました。主に他の大きな拡張とは異なり、理論的に十分に接地されていないという事実に由来しています。
しかし、それについて考えてみると、他の人に本当に悪いことを説明できるかどうかは分かりません。
私が探しているのは、OverlappingInstances
を使用すると、タイプシステムや他の不変条件を覆すことによるかどうか、あるいは一般的な予期せぬことや厄介さなど、悪いことが起こる可能性のある具体的な例です。
拡張モジュールをオンにすると、新しいインスタンスの重複がサイレントに追加される可能性があるため、単一のモジュールのインポートを追加または削除するだけではプログラムの意味を変更できないという特性が破られています。除去された。なぜそれが不愉快なのか分かりますが、私はそれがなぜ大騒ぎでひどいのか分かりません。
ボーナスの質問:私たちが有用ではあるが理論的には十分に根拠のない拡張機能の対象である限り、悪い出来事につながる可能性があるので、GeneralizedNewtypeDeriving
はどのように同じ悪いラップを得られないのでしょうか?それは否定的な可能性がローカライズすることがより容易であるからです。何が問題を引き起こし、「それをしないでください」と言うのが見えやすいのでしょうか?
:
EDIT(注答えの矛先は、OverlappingInstances
にはあまり説明が必要IncoherentInstances
をしませ焦点を当てた場合、私は好むだろう。):同様の質問hereに良い答えもあります。
'GeneralizedNewtypeDeriving'の悪さは実装上のバグです。この拡張機能については何も悪いことはありませんが、ghcは禁止する必要がある場合に許可します。 – augustss
関連:http://stackoverflow.com/questions/10830757/is-there-a-list-of-ghc-extensions-that-are-considered-safe –
@augustss、それは簡単ですか? http://hackage.haskell.org/trac/ghc/ticket/5498を参照してください。 Simonは、いつ禁止するべきかを判断するための単純な構文テストについては知らず、新しい理論的な作業と型チェッカーの安全性を高める必要があると述べています。 – glaebhoerl