Achatar a lista aninhada

Neste desafio, você receberá uma lista aninhada, como a seguinte:

[1, [2, 3], [4, [5, 6]], [7, [8, [9, 0]]]]

Olhe só para todos esses colchetes... que confuso!

O objetivo é simples: escreva uma função que transforme uma lista aninhada como a anterior em sua versão achatada, que, neste exemplo, é:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

Exemplos

flatten([[6, 7], [4, 5]]) ➞ [6, 7, 4, 5]

flatten([[[[[["cat"]]]]]]) ➞ ["cat"]

flatten([[3, [5, 6]], [9, 3]]) ➞ [3, 5, 6, 9, 3]

flatten([1, [2, 3], [4, [5, 6]], [7, [8, [9, 0]]]]) ➞ [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

Notas

Este desafio pode ser complicado, mas, com a abordagem certa, na verdade não é nada difícil. Veja os comentários se quiser uma dica.