История изменений
Исправление quasimoto, (текущая версия) :
Но не потому что readLn возвращает что-то другое при разных вызовах.
Он возвращает разные вещи. То есть run readLn, говорю — никому не интересны IO-термы, кроме как при просмотре Core, а то так и в C функции тоже могут выдавать один и тот же ассемблер. Аналогично readLn >>= f >>> return загоняет в _чистую_ функцию f _разные_ вещи, элементарно же, это проверяется.
Не понял, что не пишется?
Глобальное состояние в ФП (комментарий) — propPure и someTest пишутся и работают, это я _определяю_ как обычность и возможность разделять чистые функции и остальные (те и другие присутствуют) с точки зрения полной семантики без всяких разделений. Что в хаскеле, что где-то ещё всё это есть.
У хаскеля нету никакой такой «полной» семантики :)
А ну да, он святым духом работает как работает (ожидаемо и однозначно, как любой другой язык). На IO термах она не заканчивается (можешь хоть про Core с STG и C-- бумажки почитать, хоть уяснить, что есть конкретная реализация GHC которая работает, так что у неё не может не быть семантики, а абстрактно стандарт и гипотетический PHP интерпретатор это как-то не очень интересно :)).
Но ты то считаешь иначе?
Нет, я же объясняю что bind это ограниченная форма run, которая позволяет смешивать грязь с чистыми функциями — ну вот как в C++ a() + b() — чистый плюс принимает значения грязных функций, так что всё выражение становится нечистым, liftM2 (+) a b, если пойти дальше IO термов, то ясно, что с точки зрения выполнения мы будем получать разные вещи.
Кроме того, unsafePerformIO имеет смысл вызывать при работе с FFI, например, откуда сразу вытекает возможность получить и явное нарушение прозрачности тоже, если неправильно им воспользоваться.
int operator+(int, int); - Конечно, операция. А то, что написал ты - не операция.
Давай я поясню, первый вариант f не чистый, он превращается в чистый разделением — новый вариант чистый и просто возвращает структуру (по сути это f = id, структуру дальше вычислять некуда), которую дальше уже может вычислить нечистым eval в int. Это как бы пример того что ты начал обсуждать, но я не вижу тут чего-то неожиданного.
Исходная версия quasimoto, :
Но не потому что readLn возвращает что-то другое при разных вызовах.
Он возвращает разные вещи. То есть run . readLn, говорю — никому не интересны IO-термы, кроме как при просмотре Core, а то в C функции тоже могут выдавать один и тот же ассемблер. Аналогично readLn >>= f >>> return загоняет в _чистую_ функцию f _разные_ вещи, элементарно же.
Не понял, что не пишется?
Глобальное состояние в ФП (комментарий) — propPure и someTest пишутся и работают, это я _определяю_ как обычность и возможность разделять чистые функции и остальные (те и другие присутствуют) с точки зрения полной семантики без всяких разделений. Что в хаскеле, что где-то ещё всё это есть.
У хаскеля нету никакой такой «полной» семантики :)
А ну да, он святым духом работает как работает (ожидаемо и однозначно, как любой другой язык). На IO термах она не заканчивается (можешь хоть про Core с STG и C-- бумажки почитать, хоть уяснить что есть конкретная реализация GHC которая работает, так что у неё не может не быть семантики, а абстрактно стандарт и гипотетический PHP интерпретатор это как-то не очень интересно :)).
Но ты то считаешь иначе?
Нет, я же объясняю что bind это ограниченная форма run, которая позволяет смешивать грязь с чистыми функциями — ну вот как в C++ a() + b() — чистый плюс принимает значения грязных функций, так что всё выражение становится не чистым, liftM2 (+) a b.
Кроме того, unsafePerformIO имеет смысл вызывать при работе с FFI, например, откуда сразу вытекает возможность получить явную грязь, если неправильно им воспользоваться.
int operator+(int, int); - Конечно, операция. А то, что написал ты - не операция.
Давай я поясню, первый вариант f не чистый, он превращается в чистый разделением — новый вариант чистый и просто возвращает структуру (по сути это f = id, структуру дальше вычислять некуда), которую дальше уже может вычислить нечистым eval в int. Это как бы пример того что ты начал обсуждать, но я не вижу тут чего-то неожиданного.