написано что можно делать замену экспрешна на вэлью (и наоборот) и "поведение программы не изменится" - что в данном случае поведение программы? ) как минимум такты процессора да и байткод будут разными)
"не изменится" - по отношению к определенному набору действий, с помощью которых можно наблюдать программу
если мы пишем в лог но не наблюдаем его - то тогда это будет RT функция которая пишет в лог? )
Если мы про этот лог навсегда забываем и никогда в него не смотрим, то почему бы и не RT
но еще на этой же википедии написано что для RT нужно чтобы функция была pure, что в свою очередь означает детерминированность + отсутствие сайд эффектов)
Можно задать вопрос, являются ли 2 программы эквивалкнтными. Пишем программу, которая может их запускать и наблюдать. И пытаемся отличить их. Надо заранее определиться, что эта программа имеет право делать. Обычно неявно подразумевают, что мы ей разрешаем проверять аутпут и читать файлы. Но, например, не разрешаем замерять хип и скорость. Но вообще эквивалентность программ всегда определяется по отношению к определённому набору опреаций.
ну вот. получается если в консоль не смотреть (не включать в определенный набор операций), то println является пьюр функцией, не содержит сайд эффектов и все такое
Есть традиционный набор подразумеваемых дефолтных операций, и просмотр консоли в него входит. А так можно и результат функции не проверять, и все программы будут эквивалентны
кста IO это I/O монада
Обсуждают сегодня