Функция типа вот этой считается чистой:
pure := method(x, x + x)
pure(1) # --> 2
pure(1) # --> 2
Number foo := "bar"
pure(1) foo # --> bar (тут и далее мы отсылаем сообщение объекту 2, чтобы проверить его состояние)
Number foo = "baz"
pure(1) foo # --> baz
Поскольку, у нас любые данные типа Number имеют стейт, мы уже не можем утверждать, что наша pure возвращает всегда одно и то же. Понятное дело, что это будет происходить при любых непримитивных данных, не только с числами. Из этого должно следовать, что в ФП должны быть запрещены любые непримитивные данные. Так ли это?