Haskell GHC在运行时如何表示“undefined::Void”?

Haskell GHC在运行时如何表示“undefined::Void”?,haskell,null,runtime,ghc,Haskell,Null,Runtime,Ghc,该类型没有值,除了未定义。GHC在运行时如何表示undefined::Void。计算thunk时,它将抛出异常 表示所有未赋值表达式的方式相同,即使用指向thunk的指针。计算thunk时,它将抛出异常 > P>不同于C++和其他现代OO语言,Haskell与GHC不给运行时带来类型,编译期间使用类型信息在类型检查中使用,然后丢失。code>Void没有任何构造函数或有意义的居民,因此它在运行时根本不存在 undefined是bottom类型,因为bottom是每个数据类型的居住者(或者bott

该类型没有值,除了
未定义
。GHC在运行时如何表示
undefined::Void
。计算thunk时,它将抛出异常

表示所有未赋值表达式的方式相同,即使用指向thunk的指针。计算thunk时,它将抛出异常

> P>不同于C++和其他现代OO语言,Haskell与GHC不给运行时带来类型,编译期间使用类型信息在类型检查中使用,然后丢失。code>Void没有任何构造函数或有意义的居民,因此它在运行时根本不存在


undefined
是bottom类型,因为bottom是每个数据类型的居住者(或者bottom是每个数据类型的子类型),它将通过编译,而不管它的预期类型是什么,因此,<代码>未定义::空和其他任何代码>未定义::t<代码>在运行时是相同的,即指向一个在计算时引发异常的thouths/.p> > p> >不同于C++和其他现代OO语言,Haskell与GHC不给运行时带来类型,类型信息在编译期间用于类型检查,然后丢失
Void
没有任何构造函数或有意义的居民,因此它在运行时根本不存在


undefined
是bottom类型,因为bottom是每个数据类型的居住者(或者bottom是每个数据类型的子类型),它将通过编译,而不管它的预期类型是什么,因此,
undefined::Void
和任何其他
undefined::T
在运行时都是相同的东西,即指向一个thunk的指针,该thunk在求值时引发异常。

所以GHC根本不给出
Void
任何运行时表示?如果我问GHC,Void应该占用多少空间呢?可以有
t::Void
,但是所有这些
t
术语都会抛出或循环,或者不安全地从其他方面强制执行。我们没有定义一个
Void
构造函数,所以自然没有这样的东西。您不能询问GHC关于
Void
的大小,因为所有未刷新的值都具有完全相同的大小。我们可以做的是运行时闭包/对象,并以各种方式计算大小。
t::Void
的运行时计算大小取决于
t
@PyRulez背后的特定对象,您打算如何问这个问题?Edit:我的意思是提升的值具有相同的大小。这只是半特殊的;您可以制作各种类似的底部类型<代码>数据零点,
Int:~:Bool
,等等。所以GHC根本不提供任何运行时表示形式?如果我问GHC,Void应该占用多少空间呢?可以有
t::Void
,但是所有这些
t
术语都会抛出或循环,或者不安全地从其他方面强制执行。我们没有定义一个
Void
构造函数,所以自然没有这样的东西。您不能询问GHC关于
Void
的大小,因为所有未刷新的值都具有完全相同的大小。我们可以做的是运行时闭包/对象,并以各种方式计算大小。
t::Void
的运行时计算大小取决于
t
@PyRulez背后的特定对象,您打算如何问这个问题?Edit:我的意思是提升的值具有相同的大小。这只是半特殊的;您可以制作各种类似的底部类型<代码>数据零点,
Int:~:Bool
等。