haskell - 定义 Data.Void(Hackage 上的包 "void")的不必要类型杂耍?

标签 haskell

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/

相关文章:

haskell - 如何使用 REPA ByteString 表示形式?

haskell - 有人可以引导我完成这个 Haskell 函数(与状态单子(monad)相关)吗?

haskell - 应该如何确定是作为一个包还是多个包发布 Haskell 库?

haskell - 我的 haskell 类型签名不代表该函数

haskell - 一种复制方法,例如replicateM?

haskell - 如何在 Docker 容器中运行堆栈构建?

haskell - 在 Haskell 中使用什么来代替主循环?

haskell - 在包含单个元素和列表的列表上进行Fmap

Haskell 安全资金示例

haskell - Scala 的 Cake Pattern 可以在 Haskell 中实现吗?