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


s@(Sequence traits) flatten
[
  [| :out | s flattenOn: out] writingAs: s
].
 
s@(Sequence traits) flattenOn: w@(WriteStream traits)
[
  s do: [| :value |
    (value is: s)
      ifTrue: [value flattenOn: w]
      ifFalse: [w nextPut: value]].
].