在讨论VoidHaskell Libraries 邮件列表时,有这样的评论:
回到过去,它曾经是由
unsafeCoerceConor McBride 的要求实现的,他不想为遍历整个Functor内容和替换其内容而付费,而类型告诉我们它不应该有任何内容。如果应用于适当的 Functor,这是正确的,但在 GADT 存在的情况下是可颠覆的。
的文档unsafeVacuous还说:
If
Void是无人居住的,比任何Functor只持有该类型值的人Void都不持有任何值。这仅对不对参数执行类似 GADT 分析的有效函子是安全的。
这样一个恶作剧的 GADTFunctor实例会是什么样子?(当然只使用总函数,不使用undefined等error)