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


shared void run() {
    "Lazily flatten nested streams"
    {Anything*} flatten({Anything*} stream)
        =>  stream.flatMap((element)
            =>  switch (element)
                case (is {Anything*}) flatten(element)
                else [element]);
 
    value list = [[1], 2, [[3,4], 5], [[[]]], [[[6]]], 7, 8, []];
 
    print(list);
    print(flatten(list).sequence());
}