A type with no values. This is NOT the C or Java-style
It is useful for proving that a type can never exist or a computation path can never occur.
-- Data.Void (Void, absurd) newtype Void = Void Void -- needed when one needs to refer to void absurd :: forall a. Void -> a -- for example... data Either a b = Left a | Right b -- if this function compiles, it asserts that -- only the `Right i` path is ever taken function :: Either Void Int -> Int function Left v = absurd v function Right i = i