import typing
import inspect


def repr_callable(callable: typing.Callable) -> str:
    """
    Build a string representation of a callable, including the callable's
    :attr:``__name__``, its :class:`inspect.Parameter`s and its ``return type``

    usage::

        >>> repr_callable(repr_callable)
        'repr_callable(callable: Callable) -> str'

    :param callable: a Python callable to build a string representation of
    :returns: the string representation of the function
    """
    # pylint: disable=W0622, redefined-builtin
    sig = inspect.signature(callable)
    name = getattr(callable, '__name__', str(callable))
    return '{}{}'.format(name, sig)