2016-02-27 2 views

ответ

14

Точно так же представлены все неоценимые выражения, а именно указатель на thunk. Когда thunk будет оценен, это вызовет исключение.

+0

Итак, GHC не дает «Void» какого-либо представления во времени? Что, если я спрошу у GHC, сколько пространства займет «Void»? – PyRulez

+4

Может быть 't :: Void', но все такие термины' t' выкидывают или петляют или ненавязчиво принуждаются к чему-то другому. Мы не определяем конструктор 'Void', поэтому, естественно, такого не существует. Вы не можете задавать GHC размер 'Void', так как все невыполненные значения имеют одинаковый размер. Что мы можем сделать, это [проверка] (https://hackage.haskell.org/package/ghc-datasize-0.1.2/docs/GHC-DataSize.html) закрытия/объектов времени выполнения и различные размеры вычислений. Расчетные размеры времени выполнения для 't :: Void' будут зависеть от конкретного объекта за' t'. –

+1

@PyRulez Как вы планируете задавать этот вопрос? –

2

В отличие от C++ и некоторых других современных языков OO, Haskell с GHC не привносит типы во время выполнения, информация типа использовалась при проверке типов во время компиляции, а затем терялась. Void не имеет конструкторов или значимых жителей, поэтому он просто не существует во время выполнения.

undefined является донным типа, а нижний является обитатель каждого типа данных (или дно подтипа каждого типа данных), он будет проходить компиляцию независимо от его ожидаемого типа, поэтому undefined :: Void и любой другой undefined :: T является то же самое во время выполнения, а именно указатель на thunk, который вызывает исключение при оценке.

 Смежные вопросы

  • Нет связанных вопросов^_^