--- /dev/null
+from typing import Any, Callable, Iterable, Optional, overload, TypeVar, Union\r
+\r
+_T = TypeVar('_T')\r
+_S = TypeVar('_S')\r
+\r
+@overload\r
+def first(iterable: Iterable[_T]) -> Optional[_T]: ...\r
+@overload\r
+def first(iterable: Iterable[_T], default: _S) -> Union[_T, _S]: ...\r
+@overload\r
+def first(iterable: Iterable[_T], default: _S, key: Optional[Callable[[_T], Any]]) -> Union[_T, _S]: ...\r
+@overload\r
+def first(iterable: Iterable[_T], *, key: Optional[Callable[[_T], Any]]) -> Optional[_T]: ...\r