为什么每个非原始的 haskell 数据类型都被提升(即被 _|_
占用)?
我听说一个原因是 seq
的存在和语义,但我从未见过完整的解释为什么它们都被 _|_
占用- 即为什么它们都不会被 _|_
占用。
除此之外,还有什么其他原因?
最佳答案
这是懒惰和一般递归的直接后果。在懒惰的情况下,所有*值都可能是未评估的表达式。在一般递归存在的情况下,所有未评估的表达式都可能发散。当评估发散时,值(value)是最低的。
*在某些情况下,您可能拥有一个已知已被评估的值,例如来自具有严格字段的构造函数上的模式匹配。但是对于每种(提升的)类型,都有一些方法可以生成该类型的未评估值。 undefined::a
就是这样一种方式。
关于haskell - 为什么每个 haskell 类型都被提升(即被 _|_ 占用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234168/