GHC如何在运行时代表`undefined :: Void`?

PyR*_*lez 1 null haskell runtime ghc

Void除此之外,该类型没有值undefined.GHC如何undefined :: Void在运行时代表?

aug*_*tss 14

表示所有未评估的表达式的方式相同,即使用指向thunk的指针.当评估thunk时,它将抛出异常.

  • 可以有`t :: Void`但是所有这样的`t`术语都会抛出或循环或被其他东西不安全地强制执行.我们没有定义一个`Void`构造函数,所以自然没有这样的东西.你不能问GHC关于'Void`的大小,因为所有未提升的值都具有完全相同的大小.我们可以做的是以各种方式[inspect](https://hackage.haskell.org/package/ghc-datasize-0.1.2/docs/GHCvalsSize.html)运行时闭包/对象和计算大小.`t :: Void`的运行时计算大小将取决于`t`后面的特定对象. (4认同)
  • 它只是半特殊的; 你可以制作各种类似底部的类型.`data Zero`,`Int:〜:Bool`等 (3认同)