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
等。