gpt4 book ai didi

haskell - 为什么 Haskell 管道 "use () to close unused inputs and X (the uninhabited type) to close unused outputs"?

转载 作者:行者123 更新时间:2023-12-04 07:19:37 26 4
gpt4 key购买 nike

Pipes Tutorial ,它说:

The concrete type synonyms use () to close unused inputs and X (the uninhabited type) to close unused outputs:



我想知道为什么 ()X按原样使用。为什么不 X()输入和输出?

最佳答案

X在管道中通常拼写为 Void在 Haskell 生态系统的其余部分,所以我们假设 X = Void .它是这样定义的:

data Void

它有一个“消除器”
absurd :: Void -> a
absurd x = case x of {}

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

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

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

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

关于haskell - 为什么 Haskell 管道 "use () to close unused inputs and X (the uninhabited type) to close unused outputs"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com