函数定义如下所示:
absurd :: Void -> a
absurd a = a `seq` spin a where
spin (Void b) = spin b
这有什么区别?
答案 0 :(得分:3)
实际构造Void类型的值是不可能的。因此,您声称属于Void类型的任何值都必须是某种错误。通过序列化该值,可以显示错误。
有关请求此功能的原始问题,请参阅:https://github.com/ekmett/void/issues/2
答案 1 :(得分:2)
该定义很旧,仅用于void
包中的向后兼容性。 base
中的版本更简单:
data Void
absurd :: Void -> a
absurd x = case x of
空case
是一个相对较新的功能。 void
中的版本与较旧的GHC版本兼容,并试图通过一个奇怪的方法来获取良好的错误消息(通过强制该值)并让GHC知道评估将失败(对于死代码删除)。这不是最可靠的事情。但实际上,现在可能不值得担心太多了。