[英]What does () mean in Haskell
在一些Haskell代码中,我遇到了:
put :: s -> m ()
()
在这里意味着什么?
我使用搜索引擎,但我找不到正确处理()
的搜索引擎。
()
表示“无聊”。 这意味着无聊的类型包含一件事,也很无聊。 通过将无聊类型的一个元素与另一个元素进行比较,没有什么有趣的,因为通过给予它任何注意力,没有什么可以学习无聊类型的元素。
它与空类型非常不同,在Haskell Void
称为(我希望人们选择一个更好的名字,就像我建议的那样)。 空的类型是非常令人兴奋的,因为如果有人给你一个属于它的价值,你知道你已经死了,在天堂,你想要的任何东西都是你的。
但如果有人给你一个()
的价值,不要兴奋。 把它扔掉
有时采用由“元素类型”参数化的类型构造函数并使用()
填充参数很有趣。 您可以看到类型构造函数中固有的信息,而不是来自元素。 例如, Maybe ()
是Bool
一个版本,有Just ()
或Nothing
。 此外, [()]
相当于(可能是无限的)自然数:您拥有的唯一信息是长度。
所以, ()
意思是“无聊”,但这通常是一个有趣的事情发生在其他地方的线索。
如果不是奇怪的特殊语法,它可以定义为
data () = ()
它是关于最无聊的类型。 语法应该让你想到元组: (a,b)
是一对, (a,b,c)
是三元组等, ()
是0元组。 唯一缺少的是1元组,它不能具有该语法,因为它会与通常使用的括号冲突。
()
经常被用作没有有趣结果的东西的结果。 例如,应该执行某些I / O并在不产生结果的情况下终止的IO
操作通常具有类型IO ()
。 它也可以在你需要一些无趣的输入时使用; GHC有特殊的语法,但在Haskell 98中,模仿Lisp的cond
是这样的:
case () of
() | c1 -> e1
| c2 -> e2
...
| otherwise -> e3
它是完全有效的,但也非常无聊,要问你有什么类型的值()
; 你可以拥有的只有一个合法的。
从“Haskell-as-almost-category”的观点来看, ()
是最终的对象 。 也就是说,对于任何类型X
, 只有一个类型为X -> ()
合法函数,即const ()
。 从另一个方向来看, Void
型pigworker提到的是一个初始对象 。 对于任何类型X
, 只有一个类型为Void -> X
合法函数Void -> X
,即absurd
。 如果您有分类推理的心情,初始和最终对象可能有用。
有专门针对Haskell的优秀搜索引擎。
http://hayoo.fh-wedel.de/?query=()会立即给你正确答案:
Data
()
ghc-prim -GHC.Tuple
unit datatype()
有一个非undefined成员,nullary constructor()
。
它被称为“单位类型” 。 在某些方面,您可以将其视为Haskell等同于void
。 它是一种只有一个值(也是()
)的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.