<div dir="ltr">&quot;Nothing&quot; feels like it collides too much with the concept of a function that returns, but returns nothing (i.e., Void), however.<div><br></div><div>If I read a function declaration from left to right:</div><div><br></div><div>    func foo() -&gt; Nothing</div><div><br></div><div>I read that as &quot;a function foo that returns nothing&quot;. That sounds like a Void function to me. On the other hand:</div><div><br></div><div>    func foo() -&gt; Never</div><div><br></div><div>I read that as &quot;a function foo that returns never&quot;. That&#39;s perfectly clear to me.</div><div><br></div><div>When it comes to naming things like this, I don&#39;t think we should try to shoehorn in the arguably more &quot;pure&quot; names when it runs the risk of causing confusion with Swift&#39;s C-based ancestry. I&#39;d argue that it&#39;s more important for the language to be clearly readable than to satisfy a notion of absolute adherence to pure formal semantics that only theorists would completely understand. The main audience here is still app developers and perhaps backend developers, not academics.</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jun 6, 2016 at 8:16 AM Charlie Monroe via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">You are thinking of it as a return type, but that&#39;s not how you should think of it, really - that&#39;s an example of what it may be used for, but it should not be the only aspect.<br>
<br>
It should be the opposite of Any, which (excluding None), seems to be Nothing. Or Singularity :)<br>
<br>
6. 6. 2016 v 16:12, Vladimir.S via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;:<br>
<br>
&gt; +1 for Never, as &#39;foo() -&gt; Never&#39; reads as &#39;foo returns never&#39; i.e. close to &#39;never returns&#39;. Or we just need NoReturn as replacement for @noreturn, and then think about true bottom type and its name separately.<br>
&gt;<br>
&gt;&gt; On 06.06.2016 16:37, Thorsten Seitz via swift-evolution wrote:<br>
&gt;&gt; My preference from the current suggestions would be Never.<br>
&gt;&gt;<br>
&gt;&gt; -Thorsten<br>
&gt;&gt;<br>
&gt;&gt;&gt; Am 06.06.2016 um 15:24 schrieb Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Ceylon uses `Nothing` for the bottom type.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -Thorsten<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Am 05.06.2016 um 20:39 schrieb Charlie Monroe via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; While None is probably the best way to describe the opposite of Any, it would be often mistaken for .None (i.e. Optional) by newcomers to the language.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I&#39;d personally prefer calling it &quot;Nil&quot; (capital N), which really means &quot;nonexistent&quot;. The same way ObjC had &quot;nil&quot; for &quot;id&quot; and &quot;Nil&quot; for Class. Possibly, to avoid confusion with nil, calling it Null? Though that might get confused with NSNull, once the NS prefix gets dropped.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Or &quot;Nothing&quot; as in Scala.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On Jun 5, 2016, at 8:26 PM, Антон Жилин via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; The following names were suggested: NoReturn, Bottom, None, Never.<br>
&gt;&gt;&gt;&gt;&gt; I would pick None, because it looks like opposite to Any and fits nicely in generic types.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I would prefer the type to be simple, and be implemented as a case-less enum (not a bottom value, as in Haskell).<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; None should be a usual enum, with no compiler magic except that functions returning None are equivalent to current @noreturn.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Example 1.<br>
&gt;&gt;&gt;&gt;&gt; let x: None?<br>
&gt;&gt;&gt;&gt;&gt; // ...<br>
&gt;&gt;&gt;&gt;&gt; let y = x!<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; It will trap in runtime not because we discover scary bottom thing, as in Haskell, but because x had value Optional.none at that moment and we asserted otherwise.<br>
&gt;&gt;&gt;&gt;&gt; We could prove that it is always true in this case, but compiler must be stupid about this.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Example 2.<br>
&gt;&gt;&gt;&gt;&gt; Compiler should allow including None in structures. Error will show up in constructor, when we will not be able to initialize the field.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Example 3.<br>
&gt;&gt;&gt;&gt;&gt; None in an enum case makes that case never appear in values of such a type. But compiler can not know about that.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; - Anton<br>
&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; swift-evolution mailing list<br>
&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>