Void
Haskell Libraries メーリングリストで議論しているときに、次のような発言がありました:
昔は、タイプが何も持つべきではないと教えてくれたときに、
unsafeCoerce
全体をトラバースしてその内容を置き換えるのにお金を払いたくないというコナー・マクブライドの要請で実装されていました。Functor
これは、適切な Functor に適用された場合は正しいですが、GADT が存在する場合は覆すことができます。
のドキュメントにunsafeVacuous
も次のように記載されています。
タイプの値のみを保持する
Void
ものよりも無人である場合は、値を保持していません。Functor
Void
これは、引数に対して GADT のような分析を実行しない有効なファンクターに対してのみ安全です。
このようないたずら好きな GADTFunctor
インスタンスはどのように見えるでしょうか? (もちろんトータル機能のみを使用しundefined
、error
などは使用しません)