[Haskell-cafe] Is it safe to postulate () has one inhabitant?

Richard Eisenberg eir at cis.upenn.edu
Tue Apr 12 00:49:45 UTC 2016

I believe this is safe, yes.

Saying the kind () has infinitely many types in it is somewhat like saying the type () has infinitely many terms in it, like (), undefined, undefined 1, undefined False, ... With the change to type families in the past few years, it should be impossible to match on any inhabitant of the kind () except the type '(). That makes the postulate you postulate quite sensible.


On Apr 11, 2016, at 4:07 PM, David Feuer <david.feuer at gmail.com> wrote:

> The () kind has infinitely many inhabitants: the type '() and any stuck or looping types with appropriate kinds. However, I've not been able to find a way to break type safety with the postulate
> unitsEqual :: (a :: ()) :~: (b :: ())
> in GHC 7.10.3 (it was possible using a now-rejected data family in 7.8.3). Is there some way I haven't found yet, or is this safe? If it's *not* safe, is the equivalent postulate using Void instead of () safe? For my purposes, () would be nicer, but it feels riskier.
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160411/2e2fe8ff/attachment.html>

More information about the Haskell-Cafe mailing list