Пакет void утверждает, что он предоставляет неживой тип под названием Void
, который определяется следующим образом -
newtype Void = Void Void
Как это определение лучше, чем использование чего-то более простого? Скажем -
data Void
Если мое понимание верное, оба типа данных содержат только нижние значения. Однако последнее гораздо легче понять.
РЕДАКТИРОВАТЬ: Хорошо, поэтому я понимаю, что Даниэль ответил ниже. Однако я думал о другом, возможно, более простом способе сделать это, оставаясь совместимым с Haskell98. Мы можем использовать абстрактный тип данных и не предоставлять пользователю никаких конструкторов.
module Data.Void (Void) where
data Void = Void
Теперь только код в модуле Data.Void может построить Void, однако, поскольку мы знаем, что это не так, тип данных Void является фактически необитаемым.
Будет ли это работать, или я что-то пропустил здесь?