haskell - 为什么每个 haskell 类型都被提升(即被 _|_ 占用)?

标签 haskell

为什么每个非原始的 haskell 数据类型都被提升(即被 _|_ 占用)?

我听说一个原因是 seq 的存在和语义,但我从未见过完整的解释为什么它们都被 _|_ 占用- 即为什么它们都不会被 _|_ 占用。

除此之外,还有什么其他原因?

最佳答案

这是懒惰和一般递归的直接后果。在懒惰的情况下,所有*值都可能是未评估的表达式。在一般递归存在的情况下,所有未评估的表达式都可能发散。当评估发散时,值(value)是最低的。

*在某些情况下,您可能拥有一个已知已被评估的值,例如来自具有严格字段的​​构造函数上的模式匹配。但是对于每种(提升的)类型,都有一些方法可以生成该类型的未评估值。 undefined::a 就是这样一种方式。

关于haskell - 为什么每个 haskell 类型都被提升(即被 _|_ 占用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234168/

相关文章:

haskell - Haskell非类型变量参数错误

haskell - 没有因使用 `print' 而产生的 (Show (Int -> Int)) 实例

haskell - 无法将预期类型 ‘[Integer]’ 与实际类型 ‘Integer’ 匹配

list - 相当于 Haskell 中的 map 函数的 Lambda 演算是什么?

json - 如何使用 Aeson 将 Haskell ADT 序列化为整洁的 JSON?

Haskell 无法从 GADT 构造函数中找出类型

haskell - 什么可以用 Haskell monad 完成而不能用 Lisp 宏完成,反之亦然?

haskell - 如何使括号免受异步异常的影响?

haskell - 获取内容 utf-8 文件时 hGetContents 挂起

parsing - 用秒差距解析子字符串(通过忽略不匹配的前缀)