Существует причина эффективности, что io_lib: format возвращает глубокие списки. В основном это сохраняет вызов спискам: flatten.
Спросите себя почему вы хотите, чтобы список был сведен. Если вы собираетесь распечатать список или отправить его в порт или записать в файл, все эти операции обрабатывают глубокие списки.
Если вам действительно нужен какой-то плоский список по какой-то причине, просто сгладьте его. Или вы можете создать свой собственный формат my_io_lib :, который возвращает уплощенные списки, если вы считаете это важным.
(Если вы хотите сгладить список только по причинам отладки, то либо напечатайте свои строки с помощью ~ s, либо создайте выравниватель в модуле erlang с именем user_default
. Примерно так:
-module(user_default).
-compile(export_all).
%% either this:
fl(String) ->
lists:flatten(String).
%% or this:
pp(String) ->
io:format("~s~n", [String]).
Затем вы можете использовать fl / 1 и print / 1 в оболочке Erlang (если, конечно, на вашем пути будет user_default.beam).