from typing import Any
from typing import Iterable
from typing import Callable


def live(cell: Any, neigbours: Iterable[Any], regenerate: Callable[[], Any]) -> Any:
    """
    Implements the logic of 'The Game of Life'.
    Any cell except of 'None' is considered as alive.
    Returns the existing cell if it survives, a new cell if it regenerates or 'None' if if dies.
    """
    neigbours_alive = sum(neigbour is not None for neigbour in neigbours)

    if cell is not None and (neigbours_alive < 2 or 3 < neigbours_alive):
        return None

    if cell is None and neigbours_alive == 3:
        return regenerate()

    return cell