Size: a a a

Scala User Group

2020 January 24

AY

Aleksey Yakushev in Scala User Group
Я вот не могу понять как "IO gives you referential transparency." В IO же можно завернуть что-то, что читает из вне, имеет сайд эффект.  результат может быть разным при одинаковых входных параметрах. какое тогда referential transparency. :(
источник

V

Vλadimir in Scala User Group
Aleksey Yakushev
Я вот не могу понять как "IO gives you referential transparency." В IO же можно завернуть что-то, что читает из вне, имеет сайд эффект.  результат может быть разным при одинаковых входных параметрах. какое тогда referential transparency. :(
Сам IO (конструкция) будет тот же
источник

V

Vλadimir in Scala User Group
А когда ты его запустишь - то уже можешь получить разные результаты
источник

AY

Aleksey Yakushev in Scala User Group
как-будто речь про referential transparency на уровне компиляции, а в рантайме,  когда ты его запустишь - то уже можешь получить разные результаты, т.е. будто нарушение referential transparency. Как-то бы прочувствовать и понять это лучше
источник

Oℕ

Oleg ℕizhnik in Scala User Group
IO - это тип данных
источник

AY

Aleksey Yakushev in Scala User Group
понимаю
источник

Oℕ

Oleg ℕizhnik in Scala User Group
безопасные операции над этим типом данных не нарушают ссылочной прозрачности при условии использования чистых функций в комбинаторах
источник

Oℕ

Oleg ℕizhnik in Scala User Group
unsafeRun - не безопасная операция
источник

Oℕ

Oleg ℕizhnik in Scala User Group
IO[A] означает "процесс, производящий некоторый эффект и в конце концов производящий элемент типа А"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
равенство двух элементов IO[A] подразумевает "процессы произведут одинаковое воздействие на систему, т.е. из одного стартового состояния система придёт в одно конечное состояние и произведённые результаты, если будут успешно построены будут равны"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
в этих терминах операции над IO[A] сохраняют ссылочную прозрачность
источник

AY

Aleksey Yakushev in Scala User Group
но ведь, в реальности " при условии использования чистых функций в комбинаторах" практически не соблюдается, поэтому и операции над IO[A] НЕ сохраняют ссылочную прозрачность!?
источник

AY

Aleksey Yakushev in Scala User Group
просто пример, получили от пользователя запрос, выполнили процедуру в бд и вернули резульатат. Всё не чистое, в чем тогда профит от использования тут IO для оборачивая?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Aleksey Yakushev
но ведь, в реальности " при условии использования чистых функций в комбинаторах" практически не соблюдается, поэтому и операции над IO[A] НЕ сохраняют ссылочную прозрачность!?
в реальности соблюдается
источник

Oℕ

Oleg ℕizhnik in Scala User Group
и операции над IO сохраняют ссылочную прозрачность
источник

Oℕ

Oleg ℕizhnik in Scala User Group
вы можете продемонстрировать пример, не сохраняющий ссылочную прозрачность?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Aleksey Yakushev
просто пример, получили от пользователя запрос, выполнили процедуру в бд и вернули резульатат. Всё не чистое, в чем тогда профит от использования тут IO для оборачивая?
вы не выполнили процедуру в БД, когда сконструировали IO
источник

Oℕ

Oleg ℕizhnik in Scala User Group
вы вообще ничего не выполнили
источник

Oℕ

Oleg ℕizhnik in Scala User Group
вы сконструировали описание выполнения чего-то
источник

Oℕ

Oleg ℕizhnik in Scala User Group
эти описания можно композить
источник