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