def flatten_list(l):
    """
    Flatten a list recursively without for loops or additional modules

    Parameters
    ---------
    l : list
        List to flatten

    Example Usage:
        .. code-block:: python

            from autoprotocol_utilities.misc_helpers import flatten_list

            temp_flattened_list = flatten_list(params["source"])
            milliq_water_id = "rs17gmh5wafm5p"
            lysis_buffer = createMastermix(protocol, "Water", "micro-1.5",\
                reactions=len(temp_flattened_list),resources={milliq_water_id: Unit(50, "ul")})
            protocol.transfer(source=lysis_buffer, dest=temp_flattened_list, volume="50:ul")


    Returns
    -------
    list
        Flat list

    Raises
    ------
    ValueError
        If l is not of type list

    """
    if isinstance(l, list):
        return [x for sublist in l for x in flatten_list(sublist)]
    else:
        return [l]