prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  `merge_type` `types` type hint
  https://github.com/strawberry-graphql/strawberry/blob/main/strawberry/tools/merge_types.py#L9
  
  The current `Tuple[Type]` produces:
  ```
  *.py:15:5: error: Argument 2 to "merge_types" has incompatible type "Tuple[Type[QueryA], Type[QueryB], Type[QueryC]]"; expected "Tuple[Type[Any]]"  [arg-type]
  ```
  
  According to [mypy](https://mypy.readthedocs.io/en/stable/kinds_of_types.html#tuple-types), we should either change it to `Tuple[Type, ...]` or follow mypy's suggestion and go with a generic `Sequence`.
  
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `strawberry/tools/merge_types.py`
  Content:
  ```
  1 import warnings
  2 from collections import Counter
  3 from itertools import chain
  4 from typing import Tuple, Type
  5 
  6 import strawberry
  7 
  8 
  9 def merge_types(name: str, types: Tuple[Type]) -> Type:
  10     """Merge multiple Strawberry types into one
  11 
  12     For example, given two queries `A` and `B`, one can merge them into a
  13     super type as follows:
  14 
  15         merge_types("SuperQuery", (B, A))
  16 
  17     This is essentially the same as:
  18 
  19         class SuperQuery(B, A):
  20             ...
  21     """
  22 
  23     if not types:
  24         raise ValueError("Can't merge types if none are supplied")
  25 
  26     fields = chain(*(t._type_definition.fields for t in types))
  27     counter = Counter(f.name for f in fields)
  28     dupes = [f for f, c in counter.most_common() if c > 1]
  29     if dupes:
  30         warnings.warn("{} has overridden fields: {}".format(name, ", ".join(dupes)))
  31 
  32     return strawberry.type(type(name, types, {}))
  33
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/strawberry/tools/merge_types.py b/strawberry/tools/merge_types.py
  --- a/strawberry/tools/merge_types.py
  +++ b/strawberry/tools/merge_types.py
  @@ -1,12 +1,12 @@
   import warnings
   from collections import Counter
   from itertools import chain
  -from typing import Tuple, Type
  +from typing import Tuple
   
   import strawberry
   
   
  -def merge_types(name: str, types: Tuple[Type]) -> Type:
  +def merge_types(name: str, types: Tuple[type, ...]) -> type:
       """Merge multiple Strawberry types into one
   
       For example, given two queries `A` and `B`, one can merge them into a
  @@ -23,7 +23,9 @@
       if not types:
           raise ValueError("Can't merge types if none are supplied")
   
  -    fields = chain(*(t._type_definition.fields for t in types))
  +    fields = chain(
  +        *(t._type_definition.fields for t in types)  # type: ignore[attr-defined]
  +    )
       counter = Counter(f.name for f in fields)
       dupes = [f for f, c in counter.most_common() if c > 1]
       if dupes:
  
verification_info: {"golden_diff": "diff --git a/strawberry/tools/merge_types.py b/strawberry/tools/merge_types.py\n--- a/strawberry/tools/merge_types.py\n+++ b/strawberry/tools/merge_types.py\n@@ -1,12 +1,12 @@\n import warnings\n from collections import Counter\n from itertools import chain\n-from typing import Tuple, Type\n+from typing import Tuple\n \n import strawberry\n \n \n-def merge_types(name: str, types: Tuple[Type]) -> Type:\n+def merge_types(name: str, types: Tuple[type, ...]) -> type:\n     \"\"\"Merge multiple Strawberry types into one\n \n     For example, given two queries `A` and `B`, one can merge them into a\n@@ -23,7 +23,9 @@\n     if not types:\n         raise ValueError(\"Can't merge types if none are supplied\")\n \n-    fields = chain(*(t._type_definition.fields for t in types))\n+    fields = chain(\n+        *(t._type_definition.fields for t in types)  # type: ignore[attr-defined]\n+    )\n     counter = Counter(f.name for f in fields)\n     dupes = [f for f, c in counter.most_common() if c > 1]\n     if dupes:\n", "issue": "`merge_type` `types` type hint\nhttps://github.com/strawberry-graphql/strawberry/blob/main/strawberry/tools/merge_types.py#L9\r\n\r\nThe current `Tuple[Type]` produces:\r\n```\r\n*.py:15:5: error: Argument 2 to \"merge_types\" has incompatible type \"Tuple[Type[QueryA], Type[QueryB], Type[QueryC]]\"; expected \"Tuple[Type[Any]]\"  [arg-type]\r\n```\r\n\r\nAccording to [mypy](https://mypy.readthedocs.io/en/stable/kinds_of_types.html#tuple-types), we should either change it to `Tuple[Type, ...]` or follow mypy's suggestion and go with a generic `Sequence`.\r\n\r\n\n", "before_files": [{"content": "import warnings\nfrom collections import Counter\nfrom itertools import chain\nfrom typing import Tuple, Type\n\nimport strawberry\n\n\ndef merge_types(name: str, types: Tuple[Type]) -> Type:\n    \"\"\"Merge multiple Strawberry types into one\n\n    For example, given two queries `A` and `B`, one can merge them into a\n    super type as follows:\n\n        merge_types(\"SuperQuery\", (B, A))\n\n    This is essentially the same as:\n\n        class SuperQuery(B, A):\n            ...\n    \"\"\"\n\n    if not types:\n        raise ValueError(\"Can't merge types if none are supplied\")\n\n    fields = chain(*(t._type_definition.fields for t in types))\n    counter = Counter(f.name for f in fields)\n    dupes = [f for f, c in counter.most_common() if c > 1]\n    if dupes:\n        warnings.warn(\"{} has overridden fields: {}\".format(name, \", \".join(dupes)))\n\n    return strawberry.type(type(name, types, {}))\n", "path": "strawberry/tools/merge_types.py"}], "after_files": [{"content": "import warnings\nfrom collections import Counter\nfrom itertools import chain\nfrom typing import Tuple\n\nimport strawberry\n\n\ndef merge_types(name: str, types: Tuple[type, ...]) -> type:\n    \"\"\"Merge multiple Strawberry types into one\n\n    For example, given two queries `A` and `B`, one can merge them into a\n    super type as follows:\n\n        merge_types(\"SuperQuery\", (B, A))\n\n    This is essentially the same as:\n\n        class SuperQuery(B, A):\n            ...\n    \"\"\"\n\n    if not types:\n        raise ValueError(\"Can't merge types if none are supplied\")\n\n    fields = chain(\n        *(t._type_definition.fields for t in types)  # type: ignore[attr-defined]\n    )\n    counter = Counter(f.name for f in fields)\n    dupes = [f for f, c in counter.most_common() if c > 1]\n    if dupes:\n        warnings.warn(\"{} has overridden fields: {}\".format(name, \", \".join(dupes)))\n\n    return strawberry.type(type(name, types, {}))\n", "path": "strawberry/tools/merge_types.py"}]}