Списки на функциональных языках неизменны / постоянны.
Добавление в начало неизменяемого списка дешево, потому что вам нужно всего лишь выделить один узел со следующим указателем, указывающим на заголовок предыдущего списка. Нет необходимости изменять исходный список, поскольку это только односвязный список, а указатели на предыдущую главу не видят обновления.
Добавление узла в конец списка требует изменения последнего узла, чтобы он указывал на вновь созданный узел. Только это невозможно, потому что узел неизменен. Единственный вариант - создать новый узел, который имеет то же значение, что и последний узел, и указывает на вновь созданный хвост. Этот процесс должен повторяться до самого начала списка, в результате чего создается совершенно новый список, который является копией первого списка, за исключением узла thetail. Следовательно, дороже.