Я кстати не знаю, как в хускеле это оптимизируется. Под капотом там все равно должны быть линейные листы, иначе все дико тормозить будет из-за indirection.
А можно не думать в каждой функции "нужно или нет", а мыслить о сложности функции, только по ее сигнатуре. Заодно и НЕ заботясь о том что было перед или после, или что будет внутри всех вложенных вызовах.
Я не спорю, что это сложнее, но зато куда эффективнее
Кстати, если есть боле за цену копирования, можно законтрибьютить в тот же котлин переопределение оператора List::plus. И сделать там новый лист, который не будет копировать, а будет хранить ссылки на два старых. Не удивлюсь, если уже так и сделано
Кстати, если есть боле за цену копирования, можно законтрибьютить в тот же котлин переопределение оператора List::plus. И сделать там новый лист, который не будет копировать, а будет хранить ссылки на два старых. Не удивлюсь, если уже так и сделано
Пострадает семантика, так как там даже иммутабельных коллекций нет