We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
PyCharm indicates wrong type for lambda
# Bug report

<!--
Hi, thanks for submitting a bug. We appreciate that.

But, we will need some information about what's wrong to help you.
-->

## What's wrong

While using PyCharm,  `lambda` type in `Schema` results in *Expected type 'FunctionType', got '() -> Dict[str, Union[str, Any]]' instead*
![Screenshot 2020-08-28 at 07 59 37](https://user-images.githubusercontent.com/55017335/91531501-ca378a80-e904-11ea-9558-5b44bcff7040.png)

<!-- Describe what is not working. Please, attach a traceback. -->

## How is that should be
Is this warning correct? The code runs perfectly fine but maybe the Type maybe be wrong here. On this [SO post](https://stackoverflow.com/a/33833896/12794150) they mentioned using the `from typing import Callable` for type hinting a lambda.
<!-- Describe how it should work. -->

## System information

<!-- Describe system information -->
```
❯ python3 --version
Python 3.8.5

❯ sw_vers
ProductName:	macOS
ProductVersion:	11.0
BuildVersion:	20A5354i
```
PyCharm 2020.2.1

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `mimesis/typing.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 
3 """Custom types and shortcuts for annotating Mimesis."""
4 
5 import datetime
6 from typing import Any, Dict, Union
7 
8 __all__ = [
9     'JSON',
10     'DateTime',
11     'Timestamp',
12     'Time',
13     'Date',
14     'Seed',
15 ]
16 
17 JSON = Dict[str, Any]
18 
19 DateTime = datetime.datetime
20 
21 Time = datetime.time
22 
23 Date = datetime.date
24 
25 Timestamp = Union[str, int]
26 
27 Seed = Union[int, str, bytes, bytearray]
28
```

Path: `mimesis/schema.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 
3 """Implements classes for generating data by schema."""
4 
5 from typing import Any, Callable, List, Optional
6 
7 from mimesis.exceptions import (
8     UnacceptableField,
9     UndefinedField,
10     UndefinedSchema,
11     UnsupportedField,
12 )
13 from mimesis.providers.generic import Generic
14 from mimesis.typing import JSON, Seed
15 
16 __all__ = ['Field', 'Schema']
17 
18 
19 class AbstractField:
20     """
21     AbstractField is a class for generating data by the name of the method.
22 
23     Instance of this object takes any string which represents name
24     of any method of any supported data provider (:class:`~mimesis.Generic`)
25     and the ``**kwargs`` of the method.
26 
27     See :class:`~mimesis.schema.AbstractField.__call__` for more details.
28     """
29 
30     def __init__(self, locale: str = 'en',
31                  seed: Optional[Seed] = None,
32                  providers: Optional[Any] = None) -> None:
33         """Initialize field.
34 
35         :param locale: Locale
36         :param seed: Seed for random.
37         """
38         self.locale = locale
39         self.seed = seed
40         self._gen = Generic(self.locale, self.seed)
41 
42         if providers:
43             self._gen.add_providers(*providers)
44 
45         self._table = {}  # type: ignore
46 
47     def __call__(self, name: Optional[str] = None,
48                  key: Optional[Callable] = None, **kwargs) -> Any:
49         """Override standard call.
50 
51         This magic method overrides standard call so it takes any string
52         which represents the name of any method of any supported data
53         provider and the ``**kwargs`` of this method.
54 
55         .. note:: Some data providers have methods with the same names
56             and in such cases, you can explicitly define that the method
57             belongs to data-provider ``name='provider.name'`` otherwise
58             it will return the data from the first provider which
59             has a method ``name``.
60 
61         You can apply a *key function* to the result returned by
62         the method, bt passing a parameter **key** with a callable
63         object which returns the final result.
64 
65         :param name: Name of the method.
66         :param key: A key function (or other callable object)
67             which will be applied to result.
68         :param kwargs: Kwargs of method.
69         :return: Value which represented by method.
70         :raises ValueError: if provider not
71             supported or if field not defined.
72         """
73         if name is None:
74             raise UndefinedField()
75 
76         def tail_parser(tails: str, obj: Any) -> Any:
77             """Return method from end of tail.
78 
79             :param tails: Tail string
80             :param obj: Search tail from this object
81             :return last tailed method
82             """
83             provider_name, method_name = tails.split('.', 1)
84 
85             if '.' in method_name:
86                 raise UnacceptableField()
87 
88             attr = getattr(obj, provider_name)
89             if attr is not None:
90                 return getattr(attr, method_name)
91 
92         try:
93             if name not in self._table:
94                 if '.' not in name:
95                     # Fix https://github.com/lk-geimfari/mimesis/issues/619
96                     if name == self._gen.choice.Meta.name:
97                         self._table[name] = self._gen.choice
98                     else:
99                         for provider in dir(self._gen):
100                             provider = getattr(self._gen, provider)
101                             if name in dir(provider):
102                                 self._table[name] = getattr(provider, name)
103                 else:
104                     self._table[name] = tail_parser(name, self._gen)
105 
106             result = self._table[name](**kwargs)
107             if key and callable(key):
108                 return key(result)
109             return result
110         except KeyError:
111             raise UnsupportedField(name)
112 
113     def __str__(self):
114         return '{} <{}>'.format(
115             self.__class__.__name__, self.locale)
116 
117 
118 class Schema:
119     """Class which return list of filled schemas."""
120 
121     def __init__(self, schema: Callable) -> None:
122         """Initialize schema.
123 
124         :param schema: A schema.
125         """
126         if callable(schema):
127             self.schema = schema
128         else:
129             raise UndefinedSchema()
130 
131     def create(self, iterations: int = 1) -> List[JSON]:
132         """Return filled schema.
133 
134         Create a list of a filled schemas with elements in
135         an amount of **iterations**.
136 
137         :param iterations: Amount of iterations.
138         :return: List of willed schemas.
139         """
140         return [self.schema() for _ in range(iterations)]
141 
142 
143 # Alias for AbstractField
144 Field = AbstractField
145
```
--- 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()

```

diff --git a/mimesis/schema.py b/mimesis/schema.py
--- a/mimesis/schema.py
+++ b/mimesis/schema.py
@@ -11,7 +11,7 @@
     UnsupportedField,
 )
 from mimesis.providers.generic import Generic
-from mimesis.typing import JSON, Seed
+from mimesis.typing import JSON, SchemaType, Seed
 
 __all__ = ['Field', 'Schema']
 
@@ -118,10 +118,10 @@
 class Schema:
     """Class which return list of filled schemas."""
 
-    def __init__(self, schema: Callable) -> None:
+    def __init__(self, schema: SchemaType) -> None:
         """Initialize schema.
 
-        :param schema: A schema.
+        :param schema: A schema (must be a callable object).
         """
         if callable(schema):
             self.schema = schema
diff --git a/mimesis/typing.py b/mimesis/typing.py
--- a/mimesis/typing.py
+++ b/mimesis/typing.py
@@ -3,7 +3,7 @@
 """Custom types and shortcuts for annotating Mimesis."""
 
 import datetime
-from typing import Any, Dict, Union
+from typing import Any, Callable, Dict, Union
 
 __all__ = [
     'JSON',
@@ -11,6 +11,7 @@
     'Timestamp',
     'Time',
     'Date',
+    'SchemaType',
     'Seed',
 ]
 
@@ -25,3 +26,5 @@
 Timestamp = Union[str, int]
 
 Seed = Union[int, str, bytes, bytearray]
+
+SchemaType = Callable[[], JSON]

{"golden_diff": "diff --git a/mimesis/schema.py b/mimesis/schema.py\n--- a/mimesis/schema.py\n+++ b/mimesis/schema.py\n@@ -11,7 +11,7 @@\n     UnsupportedField,\n )\n from mimesis.providers.generic import Generic\n-from mimesis.typing import JSON, Seed\n+from mimesis.typing import JSON, SchemaType, Seed\n \n __all__ = ['Field', 'Schema']\n \n@@ -118,10 +118,10 @@\n class Schema:\n     \"\"\"Class which return list of filled schemas.\"\"\"\n \n-    def __init__(self, schema: Callable) -> None:\n+    def __init__(self, schema: SchemaType) -> None:\n         \"\"\"Initialize schema.\n \n-        :param schema: A schema.\n+        :param schema: A schema (must be a callable object).\n         \"\"\"\n         if callable(schema):\n             self.schema = schema\ndiff --git a/mimesis/typing.py b/mimesis/typing.py\n--- a/mimesis/typing.py\n+++ b/mimesis/typing.py\n@@ -3,7 +3,7 @@\n \"\"\"Custom types and shortcuts for annotating Mimesis.\"\"\"\n \n import datetime\n-from typing import Any, Dict, Union\n+from typing import Any, Callable, Dict, Union\n \n __all__ = [\n     'JSON',\n@@ -11,6 +11,7 @@\n     'Timestamp',\n     'Time',\n     'Date',\n+    'SchemaType',\n     'Seed',\n ]\n \n@@ -25,3 +26,5 @@\n Timestamp = Union[str, int]\n \n Seed = Union[int, str, bytes, bytearray]\n+\n+SchemaType = Callable[[], JSON]\n", "issue": "PyCharm indicates wrong type for lambda\n# Bug report\r\n\r\n<!--\r\nHi, thanks for submitting a bug. We appreciate that.\r\n\r\nBut, we will need some information about what's wrong to help you.\r\n-->\r\n\r\n## What's wrong\r\n\r\nWhile using PyCharm,  `lambda` type in `Schema` results in *Expected type 'FunctionType', got '() -> Dict[str, Union[str, Any]]' instead*\r\n![Screenshot 2020-08-28 at 07 59 37](https://user-images.githubusercontent.com/55017335/91531501-ca378a80-e904-11ea-9558-5b44bcff7040.png)\r\n\r\n<!-- Describe what is not working. Please, attach a traceback. -->\r\n\r\n## How is that should be\r\nIs this warning correct? The code runs perfectly fine but maybe the Type maybe be wrong here. On this [SO post](https://stackoverflow.com/a/33833896/12794150) they mentioned using the `from typing import Callable` for type hinting a lambda.\r\n<!-- Describe how it should work. -->\r\n\r\n## System information\r\n\r\n<!-- Describe system information -->\r\n```\r\n\u276f python3 --version\r\nPython 3.8.5\r\n\r\n\u276f sw_vers\r\nProductName:\tmacOS\r\nProductVersion:\t11.0\r\nBuildVersion:\t20A5354i\r\n```\r\nPyCharm 2020.2.1\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n\n\"\"\"Custom types and shortcuts for annotating Mimesis.\"\"\"\n\nimport datetime\nfrom typing import Any, Dict, Union\n\n__all__ = [\n    'JSON',\n    'DateTime',\n    'Timestamp',\n    'Time',\n    'Date',\n    'Seed',\n]\n\nJSON = Dict[str, Any]\n\nDateTime = datetime.datetime\n\nTime = datetime.time\n\nDate = datetime.date\n\nTimestamp = Union[str, int]\n\nSeed = Union[int, str, bytes, bytearray]\n", "path": "mimesis/typing.py"}, {"content": "# -*- coding: utf-8 -*-\n\n\"\"\"Implements classes for generating data by schema.\"\"\"\n\nfrom typing import Any, Callable, List, Optional\n\nfrom mimesis.exceptions import (\n    UnacceptableField,\n    UndefinedField,\n    UndefinedSchema,\n    UnsupportedField,\n)\nfrom mimesis.providers.generic import Generic\nfrom mimesis.typing import JSON, Seed\n\n__all__ = ['Field', 'Schema']\n\n\nclass AbstractField:\n    \"\"\"\n    AbstractField is a class for generating data by the name of the method.\n\n    Instance of this object takes any string which represents name\n    of any method of any supported data provider (:class:`~mimesis.Generic`)\n    and the ``**kwargs`` of the method.\n\n    See :class:`~mimesis.schema.AbstractField.__call__` for more details.\n    \"\"\"\n\n    def __init__(self, locale: str = 'en',\n                 seed: Optional[Seed] = None,\n                 providers: Optional[Any] = None) -> None:\n        \"\"\"Initialize field.\n\n        :param locale: Locale\n        :param seed: Seed for random.\n        \"\"\"\n        self.locale = locale\n        self.seed = seed\n        self._gen = Generic(self.locale, self.seed)\n\n        if providers:\n            self._gen.add_providers(*providers)\n\n        self._table = {}  # type: ignore\n\n    def __call__(self, name: Optional[str] = None,\n                 key: Optional[Callable] = None, **kwargs) -> Any:\n        \"\"\"Override standard call.\n\n        This magic method overrides standard call so it takes any string\n        which represents the name of any method of any supported data\n        provider and the ``**kwargs`` of this method.\n\n        .. note:: Some data providers have methods with the same names\n            and in such cases, you can explicitly define that the method\n            belongs to data-provider ``name='provider.name'`` otherwise\n            it will return the data from the first provider which\n            has a method ``name``.\n\n        You can apply a *key function* to the result returned by\n        the method, bt passing a parameter **key** with a callable\n        object which returns the final result.\n\n        :param name: Name of the method.\n        :param key: A key function (or other callable object)\n            which will be applied to result.\n        :param kwargs: Kwargs of method.\n        :return: Value which represented by method.\n        :raises ValueError: if provider not\n            supported or if field not defined.\n        \"\"\"\n        if name is None:\n            raise UndefinedField()\n\n        def tail_parser(tails: str, obj: Any) -> Any:\n            \"\"\"Return method from end of tail.\n\n            :param tails: Tail string\n            :param obj: Search tail from this object\n            :return last tailed method\n            \"\"\"\n            provider_name, method_name = tails.split('.', 1)\n\n            if '.' in method_name:\n                raise UnacceptableField()\n\n            attr = getattr(obj, provider_name)\n            if attr is not None:\n                return getattr(attr, method_name)\n\n        try:\n            if name not in self._table:\n                if '.' not in name:\n                    # Fix https://github.com/lk-geimfari/mimesis/issues/619\n                    if name == self._gen.choice.Meta.name:\n                        self._table[name] = self._gen.choice\n                    else:\n                        for provider in dir(self._gen):\n                            provider = getattr(self._gen, provider)\n                            if name in dir(provider):\n                                self._table[name] = getattr(provider, name)\n                else:\n                    self._table[name] = tail_parser(name, self._gen)\n\n            result = self._table[name](**kwargs)\n            if key and callable(key):\n                return key(result)\n            return result\n        except KeyError:\n            raise UnsupportedField(name)\n\n    def __str__(self):\n        return '{} <{}>'.format(\n            self.__class__.__name__, self.locale)\n\n\nclass Schema:\n    \"\"\"Class which return list of filled schemas.\"\"\"\n\n    def __init__(self, schema: Callable) -> None:\n        \"\"\"Initialize schema.\n\n        :param schema: A schema.\n        \"\"\"\n        if callable(schema):\n            self.schema = schema\n        else:\n            raise UndefinedSchema()\n\n    def create(self, iterations: int = 1) -> List[JSON]:\n        \"\"\"Return filled schema.\n\n        Create a list of a filled schemas with elements in\n        an amount of **iterations**.\n\n        :param iterations: Amount of iterations.\n        :return: List of willed schemas.\n        \"\"\"\n        return [self.schema() for _ in range(iterations)]\n\n\n# Alias for AbstractField\nField = AbstractField\n", "path": "mimesis/schema.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n\n\"\"\"Custom types and shortcuts for annotating Mimesis.\"\"\"\n\nimport datetime\nfrom typing import Any, Callable, Dict, Union\n\n__all__ = [\n    'JSON',\n    'DateTime',\n    'Timestamp',\n    'Time',\n    'Date',\n    'SchemaType',\n    'Seed',\n]\n\nJSON = Dict[str, Any]\n\nDateTime = datetime.datetime\n\nTime = datetime.time\n\nDate = datetime.date\n\nTimestamp = Union[str, int]\n\nSeed = Union[int, str, bytes, bytearray]\n\nSchemaType = Callable[[], JSON]\n", "path": "mimesis/typing.py"}, {"content": "# -*- coding: utf-8 -*-\n\n\"\"\"Implements classes for generating data by schema.\"\"\"\n\nfrom typing import Any, Callable, List, Optional\n\nfrom mimesis.exceptions import (\n    UnacceptableField,\n    UndefinedField,\n    UndefinedSchema,\n    UnsupportedField,\n)\nfrom mimesis.providers.generic import Generic\nfrom mimesis.typing import JSON, SchemaType, Seed\n\n__all__ = ['Field', 'Schema']\n\n\nclass AbstractField:\n    \"\"\"\n    AbstractField is a class for generating data by the name of the method.\n\n    Instance of this object takes any string which represents name\n    of any method of any supported data provider (:class:`~mimesis.Generic`)\n    and the ``**kwargs`` of the method.\n\n    See :class:`~mimesis.schema.AbstractField.__call__` for more details.\n    \"\"\"\n\n    def __init__(self, locale: str = 'en',\n                 seed: Optional[Seed] = None,\n                 providers: Optional[Any] = None) -> None:\n        \"\"\"Initialize field.\n\n        :param locale: Locale\n        :param seed: Seed for random.\n        \"\"\"\n        self.locale = locale\n        self.seed = seed\n        self._gen = Generic(self.locale, self.seed)\n\n        if providers:\n            self._gen.add_providers(*providers)\n\n        self._table = {}  # type: ignore\n\n    def __call__(self, name: Optional[str] = None,\n                 key: Optional[Callable] = None, **kwargs) -> Any:\n        \"\"\"Override standard call.\n\n        This magic method overrides standard call so it takes any string\n        which represents the name of any method of any supported data\n        provider and the ``**kwargs`` of this method.\n\n        .. note:: Some data providers have methods with the same names\n            and in such cases, you can explicitly define that the method\n            belongs to data-provider ``name='provider.name'`` otherwise\n            it will return the data from the first provider which\n            has a method ``name``.\n\n        You can apply a *key function* to the result returned by\n        the method, bt passing a parameter **key** with a callable\n        object which returns the final result.\n\n        :param name: Name of the method.\n        :param key: A key function (or other callable object)\n            which will be applied to result.\n        :param kwargs: Kwargs of method.\n        :return: Value which represented by method.\n        :raises ValueError: if provider not\n            supported or if field not defined.\n        \"\"\"\n        if name is None:\n            raise UndefinedField()\n\n        def tail_parser(tails: str, obj: Any) -> Any:\n            \"\"\"Return method from end of tail.\n\n            :param tails: Tail string\n            :param obj: Search tail from this object\n            :return last tailed method\n            \"\"\"\n            provider_name, method_name = tails.split('.', 1)\n\n            if '.' in method_name:\n                raise UnacceptableField()\n\n            attr = getattr(obj, provider_name)\n            if attr is not None:\n                return getattr(attr, method_name)\n\n        try:\n            if name not in self._table:\n                if '.' not in name:\n                    # Fix https://github.com/lk-geimfari/mimesis/issues/619\n                    if name == self._gen.choice.Meta.name:\n                        self._table[name] = self._gen.choice\n                    else:\n                        for provider in dir(self._gen):\n                            provider = getattr(self._gen, provider)\n                            if name in dir(provider):\n                                self._table[name] = getattr(provider, name)\n                else:\n                    self._table[name] = tail_parser(name, self._gen)\n\n            result = self._table[name](**kwargs)\n            if key and callable(key):\n                return key(result)\n            return result\n        except KeyError:\n            raise UnsupportedField(name)\n\n    def __str__(self):\n        return '{} <{}>'.format(\n            self.__class__.__name__, self.locale)\n\n\nclass Schema:\n    \"\"\"Class which return list of filled schemas.\"\"\"\n\n    def __init__(self, schema: SchemaType) -> None:\n        \"\"\"Initialize schema.\n\n        :param schema: A schema (must be a callable object).\n        \"\"\"\n        if callable(schema):\n            self.schema = schema\n        else:\n            raise UndefinedSchema()\n\n    def create(self, iterations: int = 1) -> List[JSON]:\n        \"\"\"Return filled schema.\n\n        Create a list of a filled schemas with elements in\n        an amount of **iterations**.\n\n        :param iterations: Amount of iterations.\n        :return: List of willed schemas.\n        \"\"\"\n        return [self.schema() for _ in range(iterations)]\n\n\n# Alias for AbstractField\nField = AbstractField\n", "path": "mimesis/schema.py"}]}