On Sat, Oct 26, 2013 at 12:26 AM, Nicholas Vanderweit <nick.vanderweit@gmail.com> wrote:
Or, alternatively, using fix from Data.Function:

fix NotVoid

Yes, and all of them are indistinguishable from bottom or 'undefined :: forall a. a', the ghost that inhabits all types, including the empty one: Void.

What trips up beginners is the interpretation of indistinguishable-ness. At the level of denotational design, 'undefined' and 'error "(sadface)"' are to be treated as equal, although beginners would point out: "hey look, I get different output!"

Call it denotational design, or call it beautiful FP modelling, this stuff is really where it's at.

-- Kim-Ee