I'll give you Erlang, but the Ruby solution is cheating rather.
module Enumerable
def custom_flatten
inject([]) do |result, element|
if element.respond_to?(:custom_flatten)
result.concat(element.custom_flatten)
else
result.push(element)
end
end
end
end
Works on all Enumerables (Array, Hash, Set, etc)