def returning(data, fn, *args, **kwargs):
    """
    Call function `fn` with `data` and return the unchanged data.

    The return value of `fn` is ignored.
    `returning` is useful if `fn` does not return anything but has sideeffects,
    e.g., printing `data` in a `pipe` call.

    Args:
        data (anything): argument for fn
        fn (callable): a function that is going to be called
        *args: optional arguments
        **kwargs: optional key word arguments

    Returns:
        `data`


    Examples:
        >>> pipe(
        ...     "Some text",
        ...     (returning, print),
        ...     lambda data: data.upper(),
        ... )
        Some text
        'SOME TEXT'
    """
    fn(data, *args, **kwargs)
    return data