<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">f1</span>&lt;
  <span class="hljs-type">X</span>,
  <span class="hljs-type">Y</span>: <span class="hljs-type">A</span>,
  <span class="hljs-comment">// documentation</span>
  <span class="hljs-type">Z</span>: <span class="hljs-type">B</span> &amp; <span class="hljs-type">C</span>&lt;<span class="hljs-type">D</span>&gt;
&gt;()</span> <span class="hljs-keyword">where</span> <span class="hljs-type">X</span> <span class="hljs-operator">==</span> <span class="hljs-type">Y</span>, <span class="hljs-type">Y</span>: <span class="hljs-type">A</span>, <span class="hljs-type">Z</span>: <span class="hljs-type">B</span> &amp; <span class="hljs-type">C</span>&lt;<span class="hljs-type">D</span>&gt; { }

<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">&lt;</span> &lt;<span class="hljs-type">T</span>&gt;()</span> { }

<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">f2</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">p</span>: <span class="hljs-keyword">@escaping</span> () <span class="hljs-keyword">throws</span> -&gt; <span class="hljs-type">Void</span>)</span> <span class="hljs-keyword">rethrows</span> -&gt; <span class="hljs-keyword">some</span> <span class="hljs-type">Collection</span> { }

<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">f3</span>(
  <span class="hljs-params">p1e</span> <span class="hljs-params">p1i</span>: <span class="hljs-keyword">inout</span> <span class="hljs-type">Int</span> <span class="hljs-operator">=</span> <span class="hljs-number">5</span>,
  <span class="hljs-keyword">_</span> <span class="hljs-params">p2</span>: (x: <span class="hljs-type">Int</span>, y: <span class="hljs-type">Int</span>),
  <span class="hljs-params">p3</span>: (var: <span class="hljs-type">Int</span>, let: <span class="hljs-type">Int</span>) <span class="hljs-keyword">throws</span> -&gt; <span class="hljs-type">Int</span>,
  <span class="hljs-params">p4</span>: <span class="hljs-type">Int</span>...
  <span class="hljs-params">p5</span>: <span class="hljs-meta">@attribute</span> <span class="hljs-type">String</span>? <span class="hljs-operator">=</span> <span class="hljs-string">&quot;text&quot;</span>
)</span> { }

<span class="hljs-function"><span class="hljs-keyword">init</span>&lt;<span class="hljs-type">X</span>: <span class="hljs-type">A</span>&gt;(<span class="hljs-keyword">_</span> <span class="hljs-params">p</span>: <span class="hljs-meta">@attribute</span> <span class="hljs-keyword">inout</span> (x: <span class="hljs-type">Int</span>, var: <span class="hljs-type">Int</span>) <span class="hljs-operator">=</span> (<span class="hljs-number">0</span>, <span class="hljs-number">0</span>))</span> { }
<span class="hljs-function"><span class="hljs-keyword">init?</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">p</span>: <span class="hljs-meta">@attribute</span> <span class="hljs-keyword">inout</span> (x: <span class="hljs-type">Int</span>, var: <span class="hljs-type">Int</span>) <span class="hljs-operator">=</span> (<span class="hljs-number">0</span>, <span class="hljs-number">0</span>))</span> { }
<span class="hljs-function"><span class="hljs-keyword">init!</span> (<span class="hljs-keyword">_</span> <span class="hljs-params">p</span>: <span class="hljs-meta">@attribute</span> <span class="hljs-keyword">inout</span> (x: <span class="hljs-type">Int</span>, var: <span class="hljs-type">Int</span>) <span class="hljs-operator">=</span> (<span class="hljs-number">0</span>, <span class="hljs-number">0</span>))</span> { }

<span class="hljs-function"><span class="hljs-keyword">subscript</span>&lt;<span class="hljs-type">X</span>: <span class="hljs-type">A</span>&gt;(<span class="hljs-keyword">_</span> <span class="hljs-params">p</span>: <span class="hljs-meta">@attribute</span> <span class="hljs-keyword">inout</span> (x: <span class="hljs-type">Int</span>, var: <span class="hljs-type">Int</span>) <span class="hljs-operator">=</span> (<span class="hljs-number">0</span>, <span class="hljs-number">0</span>))</span>  { }

<span class="hljs-class"><span class="hljs-keyword">protocol</span> <span class="hljs-title">Comparable</span>: <span class="hljs-title">Equatable</span> </span>{

  <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">&lt;</span> (<span class="hljs-params">lhs</span>: <span class="hljs-keyword">Self</span>, <span class="hljs-params">rhs</span>: <span class="hljs-keyword">Self</span>)</span> -&gt; <span class="hljs-type">Bool</span>
  <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">&lt;=</span> (<span class="hljs-params">lhs</span>: <span class="hljs-keyword">Self</span>, <span class="hljs-params">rhs</span>: <span class="hljs-keyword">Self</span>)</span> -&gt; <span class="hljs-type">Bool</span>
  <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">&gt;</span> (<span class="hljs-params">lhs</span>: <span class="hljs-keyword">Self</span>, <span class="hljs-params">rhs</span>: <span class="hljs-keyword">Self</span>)</span> -&gt; <span class="hljs-type">Bool</span>
  <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">&gt;=</span> (<span class="hljs-params">lhs</span>: <span class="hljs-keyword">Self</span>, <span class="hljs-params">rhs</span>: <span class="hljs-keyword">Self</span>)</span> -&gt; <span class="hljs-type">Bool</span>
}
