Task

Write a function to flatten the nesting in an arbitrary list of values.

Your program should work on the equivalent of this list:

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

Where the correct result would be the list:

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

Related task

   Tree traversal


def flatten(nested) {
    def flat := [].diverge()
    def recur(x) {
        switch (x) {
            match list :List { for elem in list { recur(elem) } }
            match other      { flat.push(other) }
        }
    }
    recur(nested)
    return flat.snapshot()
}