为什么 Haskell Pipes “使用 () 关闭未使用的输入,使用 X(无人居住类型)关闭未使用的输出”?

2024-03-10

In the 管道教程 https://hackage.haskell.org/package/pipes-4.1.8/docs/Pipes-Tutorial.html#g:9,它说:

具体类型同义词的使用()关闭未使用的输入和X(这 无人居住类型)关闭未使用的输出:

我想了解为什么() and X按原样使用。为什么不X or ()对于输入和输出?


Xin Pipes 通常拼写为Void在 Haskell 生态系统的其余部分,所以让我们假设X = Void。它的定义如下:

data Void

而且它还有一个“消除器”

absurd :: Void -> a
absurd x = case x of {}

如果你有某种类型的东西Void(并强制它),然后出问题了。您的程序产生了错误,或者陷入了无限循环。

制作管道produce类型的东西Void禁止它生产任何东西(合法的)。让它产生有类型的东西()允许它产生东西,但东西不携带任何信息。它们基本上是时钟滴答声。

在输入端,一个消耗类型事物的管道Void可以等待输入,但是一旦它这样做了,它就会被卡住——没有人能够给它提供任何东西。消耗类型事物的管道()可以等待,但只能获得时钟滴答声。

所有这些选择都是合理的。我怀疑 Gonzalez 希望类型系统能够禁止用户意外地将纯生产者以错误的方式连接到纯消费者,并出现难以追踪的错误。通过让纯粹的生产者消费(),以及纯粹的消费品Void,他使得不可能以错误的方式连接它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Haskell Pipes “使用 () 关闭未使用的输入,使用 X(无人居住类型)关闭未使用的输出”? 的相关文章

随机推荐