On 09.07.2017 07:44, Walter Bright wrote:
On 7/8/2017 9:32 PM, Meta wrote:
On Sunday, 9 July 2017 at 04:23:15 UTC, Meta wrote:
On Sunday, 9 July 2017 at 02:25:50 UTC, Walter Bright wrote:
(D already has a `void` type, so can't use Haskell's word.)
Just so we are all on the same page, from a type-theory perspective
void is a unit type (it has 1 value), not an uninhabited type (it has
no values, i.e. Haskell's _|_ (bottom) type).
I read that a Void function in Haskell does not return. Is that
incorrect?
It is indeed incorrect, but this has little relevance for D. In Haskell,
non-termination and exceptions are values that you can store in a
variable (due to lazy evaluation). A function can return non-termination
or exceptions non-evaluated. When those values are finally lazily
evaluated, you get actual non-termination or a thrown exception. This is
why Haskell has no empty type. If evaluation in Haskell was strict (as
D's is), a function with return type Void would not be able to return.
(BTW: it makes more sense to return a polymorphic value, i.e. x :: t
instead of using the Void type, because Haskell does not have subtyping.
This still implies that x does not contain a 'real' value, because we
can instantiate t with Void.)
I'm not sure how Void relates to _|_
https://en.wikipedia.org/wiki/Bottom_type#In_programming_languages
says Haskell does not support empty (i.e. bottom) types.
...