El nombre "tipo vacío" es quizás confuso. Lo que esto significa es, como usted mismo dice, el tipo no contiene valores . El "vacío" no se refiere a ningún valor individual del tipo, se refiere al tipo como un todo, considerado como un conjunto de valores posibles. Por lo tanto, esto no dice algo como "una función que void
devuelve no devuelve información", sino "no existe ningún valor de tipo ⊥
".
Esto significa que una función cuyo tipo de resultado es nunca⊥
puede terminar. Si terminara, tendría que devolver un valor de , pero, bueno, ese valor no existe.⊥
También significa que ni siquiera es posible discutir cuánta información contendría un valor de tipo vacío, porque no existe tal valor. (O, si lo desea, una afirmación sin sentido como "cualquier valor de tipo vacío contiene exactamente 35093658 bits de información" es completamente cierto). Es algo útil (aunque no realmente correcto) pensar que los ⊥
valores contienen una cantidad infinita de información.
Mientras que una función C con "tipo de retorno" void
claramente puede regresar, pero no le da ninguna información en su valor de retorno. Bueno, eso es precisamente lo que caracteriza un tipo de unidad: sus valores no contienen ninguna información, porque solo hay uno de esos valores (por lo tanto, siempre puede decir cuál será el valor de retorno, incluso sin molestarse en llamar a la función).
Para citar a Conor McBride (transcrito a C):
void
significa "aburrido". Significa el tipo aburrido que contiene una cosa, también aburrida. No hay nada interesante que ganar al comparar un elemento del tipo aburrido con otro, porque no hay nada que aprender sobre un elemento del tipo aburrido prestándole atención.
Es muy diferente del tipo vacío [...]. El tipo vacío es muy emocionante, porque si alguien alguna vez te da un valor que le pertenece, sabes que ya estás muerto y en el cielo y que todo lo que quieras es tuyo.