Source code for returns._generated.converters.flatten

# -*- coding: utf-8 -*-

from returns.functions import identity


def _flatten(container):
    """
    Joins two nested containers together.

    Please, note that it will not join
    two ``Failure`` for ``Result`` case
    or two ``Nothing`` for ``Maybe`` case together.

    .. code:: python

      >>> from returns.converters import flatten
      >>> from returns.maybe import Some
      >>> from returns.result import Failure, Success
      >>> from returns.io import IO, IOSuccess, IOFailure
      >>> from returns.context import RequiresContext, RequiresContextResult

      >>> assert flatten(IO(IO(1))) == IO(1)

      >>> assert flatten(Some(Some(1))) == Some(1)

      >>> assert flatten(Success(Success(1))) == Success(1)
      >>> assert flatten(Failure(Failure(1))) == Failure(Failure(1))

      >>> assert flatten(IOSuccess(IOSuccess(1))) == IOSuccess(1)
      >>> assert flatten(IOFailure(IOFailure(1))) == IOFailure(IOFailure(1))

      >>> assert flatten(
      ...     RequiresContext.from_value(RequiresContext.from_value(1)),
      ... )(RequiresContext.empty) == 1

      >>> assert flatten(
      ...     RequiresContextResult.from_success(
      ...         RequiresContextResult.from_success(1),
      ...     ),
      ... )(RequiresContext.empty) == Success(1)

    See also:
        https://bit.ly/2sIviUr

    """
    return container.bind(identity)