title: Why Xcode keeps substituting generics with '_'
body: <p>I am making a server with Swift 5 and Vapor 3. When setting up a route I want to call a function from my controller that returns an optional like so:</p>
  
  <pre class="lang-swift prettyprint-override"><code>//Person.swift
  
  struct Person: Content {
      ...
  }
  </code></pre>
  
  <pre class="lang-swift prettyprint-override"><code>//PersonController.swift
  
  func update(_ request: Request) throws -&gt; Future&lt;Person&gt; {
      let uuid = try request.parameters.next(UUID.self)
  
      return try request.content.decode(Person.self).flatMap { content in
          request.withPooledConnection(to: DatabaseIdentifier&lt;PostgreSQLDatabase&gt;.psql) { connection in
              /*
              *  No code completion beyond this point,
              *  even connection appears as type '_' instead of
              *  PostgreSQLConnection (not relevant to the question tho,
              *  just worth noting)
              */
              if content.lastName != nil {
                  return connection.raw("Very long SQL query...")
                  .binds([...])
                  .first(decoding: Person.self)
              }
  
              return connection.raw("Other long SQL query")
              .binds([...])
              .first(decoding: Person.self)
          }
      }
  
  }
  </code></pre>
  
  <pre class="lang-swift prettyprint-override"><code>router.put("people", UUID.parameter, use: personController.update)
  </code></pre>
  
  <p>But then I get this error</p>
  
  <pre><code>Cannot convert value of type '(Request) throws -&gt; EventLoopFuture&lt;Person?&gt;' to expected argument type '(Request) throws -&gt; _'
  </code></pre>
  
  <p>I see many instances when working with Vapor in which Xcode just gives up on autocompleting, and everything is just typed as <code>_</code>. Mostly inside closures that are used as callbacks. It is VERY annoying, and quite frankly I am unsure if it is caused because of Vapor, Swift, or Xcode. It is a huge PITA but it all gets resolved once I compile, the types just get sorted out. However in this case it is just not working.</p>
  
  <p>So the question is: Why is does Xcode say the expected type is <code>(Request) throws -&gt; _</code> when the actual definition for <code>Request.put(_:use:)</code> requires a <code>(Request) throws -&gt; T</code> and how does that make a difference between <code>T</code> being <code>Future&lt;Person&gt;</code> and <code>Future&lt;Person?&gt;</code>?</p>