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