[Haskell] Haskell type containing no non-_|_ values?

Josef Svenningsson josefs at cs.chalmers.se
Fri Mar 26 13:48:49 EST 2004


Hi Janis!


On Fri, 26 Mar 2004, Janis Voigtlaender wrote:

> probably a trivial question: Is there a type in Haskell that contains
> only the undefined value _|_?
>
> The polymorphic type (forall a. a) has this property, but it seems it
> cannot be used, e.g., in a tuple:
>
> > x :: (Int,(forall a. a))
> > x = (3,undefined)
>
> leads to errors both in Hugs and GHC.
>
> I guess I can help myself out using newtype:
>
> > newtype T = T (forall a. a)
>
> > x :: (Int,T)
> > x = (3,undefined)
>
> but would like to do without. Is there a way?
>
Yep, there is a way.

newtype Void = Void Void

This type only have the following value:

void = Void void


Now, someone on this mailing list will surely think that this looks
different from undefined. But remember that the constructors in newtype
definitions are only there as a hint for the typechecker, they have no
operational meaning. So void is really undefined.

Cheers,

	/Josef


More information about the Haskell mailing list