<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Oct 26, 2013 at 12:26 AM, Nicholas Vanderweit <span dir="ltr"><<a href="mailto:nick.vanderweit@gmail.com" target="_blank">nick.vanderweit@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Or, alternatively, using fix from Data.Function:</div><div><br></div><div>fix NotVoid</div></blockquote>

</div><br>
</div>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.<br><br>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!"<br>

<br>Call it denotational design, or call it beautiful FP modelling, this stuff is really where it's at.<br><br>-- Kim-Ee<br><br></div>