Думал о создании функции CONS для создания списка, но затем понял, что я не мутирую ни одно состояние с foo + = 1, так как его == foo = foo + 1, который является новым объектом
Состояние изменяется: изменяется значение, указанное в переменной foo.
foo
Это "не функционально" в чистом смысле. У меня может возникнуть соблазн назвать это «запутанным»; -)
Удачного кодирования.