void包声称提供了一种不适合居住的类型,称为 Void
,其定义如下 -
newtype Void = Void Void
这个定义比使用更简单的定义更好吗?说 -
data Void
如果我的理解是正确的,这两种数据类型都只包含底部值。但是后者更容易理解。
编辑 :好的,所以我理解丹尼尔在下面的回答。然而,我想到了另一种可能更简单的方法来做到这一点,同时保持 Haskell98 兼容。我们可以使用 Abstract 数据类型并且不向用户公开构造函数。
module Data.Void (Void) where
data Void = Void
现在只有 Data.Void 模块中的代码可以构造一个 Void,但是因为我们知道它不能,所以 Void 数据类型实际上是无人居住的。
那会起作用还是我在这里遗漏了什么?
最佳答案
来自 Hackage 上 void 包的描述:“A Haskell 98 逻辑上无人居住的数据类型”(我的重点)。声明 Void
就像 data Void
将需要 Haskell 2010 或“EmptyDataDecls”语言扩展,因此不会是“Haskell 98”。
编辑
Here is a page在 Haskell Wiki 上准确描述了这种情况。
关于haskell - 定义 Data.Void(Hackage 上的包 "void")的不必要类型杂耍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9261490/