I was half-thinking the same, but types and sets feel interchangeable on an intuitive level in such cases.<p>Having both `: String` and `: String` seems to suggest that they are the same type, which they are not. `nameMe(_)` is a function type, while `name` is a &quot;plain value&quot;, so to speak. I think that using arrows more clearly indicates that it&#x27;s a mapping from something to something else -- in the case of Swift, I guess a mapping from a tuple to something else.<p>And think about anonymous functions, in general since I haven&#x27;t looked into Swift anonymous functions. If you indicate a function like this:<p>`func nameMe(name: String) : String`<p>How are you supposed to indicate an anonymous function? Like this:<p>`(name: String) : String`<p>Then it seems to say that name is a type of String, which in turn is a type of String. I guess you could add something like a lambda to distinguish it:<p>`(λ name =&gt; name): String`<p>But now you&#x27;ve still effectively said that both `name` (a value of type string) is the same type as the anonymous function (a function with one argument). That&#x27;s clearly wrong.<p>Using arrows for functions seems to be better when you start to want to talk about types and values by themselves, like:<p>`1: Int`, `&quot;hello&quot;: String`, `(λx =&gt; x) : a -&gt; a`